[英]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.