[英]Using Base Class Method Value In Inherited Classes Overridden Method
基類;
import java.util.Random;
public class Animal
{
public void move()
{
int value = 0;
System.out.println("Move");
Random rand = new Random();
value = rand.nextInt(2)+1;
}
}
繼承類;
public class Cat extends Animal
{
public void moveCat()
{
super.move();
System.out.println("Move Cat");
}
public static void main(String[] args)
{
Cat test = new Cat();
test.moveCat();
}
}
我試圖使用基類動物方法的值移動覆蓋方法moveCat。 為什么我不能在Cat的moveCat中使用值“value”。
例如;
public void moveDoodle()
{
super.move();
System.out.println("Move Doodle");
if(value == 1)
{
System.out.println("Value from base");
}
}
如果我從基本方法中獲取內容,為什么我也不能使用這些值。 如果它不可能我應該做什么而不是為了獲得我需要的值。
那是因為value
在你的base( Animal
)類的方法move()
的局部范圍內,這就是為什么它不被繼承。 只有實例變量才會被繼承(前提是它們不是private
)。 因此,你需要做value
實例變量讓你能夠繼承它在你的基地( Animal
)類。
int value = 0;
public void move()
{
// int value = 0;
System.out.println("Move");
Random rand = new Random();
value = rand.nextInt(2)+1;
}
注意:我可以看到你繼承了Animal
類但沒有覆蓋任何方法,這與問題標題中的建議相反。
因為value
是方法move()
的局部變量。 局部變量不會被繼承。 將變量創建為實例變量。 順便說一句,如果你試圖覆蓋move()
方法,你需要保持相同的方法簽名。
import java.util.Random;
public class Animal {
int value = 0;
public void move() {
System.out.println("Move");
Random rand = new Random();
value = rand.nextInt(2) + 1;
}
}
你的貓班
public class Cat extends Animal {
public void moveCat() {
super.move();
System.out.println("Move Cat");
}
public static void main(String[] args) {
Cat test = new Cat();
test.moveCat();
System.out.println(test.value);
}
}
通過實現, value
變量具有局部范圍。 它只能在move
方法中訪問,外部世界不知道這一點。
您需要在實例范圍內聲明此變量,以便在類級別訪問它。 您還需要為此聲明訪問修飾符,以便繼承類了解它。
以下將有效。
protected int value = 0;
public void move()
{
System.out.println("Move");
Random rand = new Random();
value = rand.nextInt(2)+1;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.