"override" 超级 class 子成员 class java
"override" super class member in subclass java
有点菜鸟的问题,这个,但我想不通。
这是animal.java。我希望它成为所有动物 sub类 的超类。它与所有子类.
在同一个包中
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()
).然后每个动物都可以 returns 自己的声音 :
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";
}
}
变量永远不会被覆盖,所以用子 class 变量替换超级调用变量是不可能的。
另一种选择是重写该方法,但它的静态,静态也不能被重写。
所以目前的设置是不可能的,除非你想覆盖非静态方法。
有点菜鸟的问题,这个,但我想不通。
这是animal.java。我希望它成为所有动物 sub类 的超类。它与所有子类.
在同一个包中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()
).然后每个动物都可以 returns 自己的声音 :
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";
}
}
变量永远不会被覆盖,所以用子 class 变量替换超级调用变量是不可能的。 另一种选择是重写该方法,但它的静态,静态也不能被重写。
所以目前的设置是不可能的,除非你想覆盖非静态方法。