有点小问题,这个,但我想不出来。
我是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“。我还希望能够创建更多用自己的字符串覆盖“调用”的类。我该怎么做呢?
发布于 2015-10-22 11:06:44
不能覆盖实例变量。只能重写方法。您可以重写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";
}
}发布于 2015-10-22 11:09:12
变量永远不会被覆盖,所以子类变量替换超级调用变量是不可能的。另一个选项是重写该方法,但是它的静态、静态也不能被重写。
因此,对于当前的设置,这是不可能的,除非您寻找覆盖非静态方法。
https://stackoverflow.com/questions/33279438
复制相似问题