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