基类;
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");
}
}
如果我从基本方法中获取内容,为什么我也不能使用这些值。如果不可能,我应该做什么,以获得我需要的值。
答案 0 :(得分:2)
那是因为value
位于基类(move()
)类的方法Animal
的本地范围内,这就是为什么它不被继承。只会继承实例变量(前提是它们不是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
类但没有覆盖任何方法,这与问题标题中的建议相反。
答案 1 :(得分:0)
因为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);
}
}
答案 2 :(得分:0)
通过实施,value
变量属于本地范围。它只能在move
方法中访问,外部世界不知道这一点。
您需要在实例范围内声明此变量,以便在类级别访问它。您还需要为此声明访问修饰符,以便继承类了解它。
以下内容可行。
protected int value = 0;
public void move()
{
System.out.println("Move");
Random rand = new Random();
value = rand.nextInt(2)+1;
}