[英]“override” super class member in subclass java
这是一个菜鸟问题,但我无法弄明白。
这是animal.java。 我希望它成为所有动物亚类的超类。 它与所有子类位于同一个包中。
public class Animal {
protected static String call = "Animals make noises, but do not have a default noise, so we're just printing this instead.";
public static void sound()
{
System.out.println(call);
}
}
这是cow.java
class Cow extends Animal {
call = "moo";
}
显然,这不会运行。 但是我希望能够运行Cow.sound()并将输出读作“moo”。 我还希望能够使用自己的字符串创建更多覆盖'call'的类。 我应该做什么呢?
您无法覆盖实例变量。 您只能覆盖方法。 您可以覆盖sound
方法(一旦将其更改为实例方法,因为无法覆盖静态方法),或者您可以覆盖sound
将调用的方法(例如getSound()
)。 然后每只动物都可以返回自己的声音:
public class Animal {
static String call = "Animals make noises, but do not have a default noise, so we're just printing this instead.";
public void sound()
{
System.out.println(getSound ());
}
public String getSound ()
{
return call;
}
}
class Cow extends Animal {
@Override
public String getSound ()
{
return "moo";
}
}
永远不会覆盖变量,因此无法替换supercall变量的子类变量。 另一种选择是覆盖方法,但其静态,静态也不能被覆盖。
因此,除非您希望覆盖非静态方法,否则使用当前设置是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.