簡體   English   中英

子類java中的“覆蓋”超類成員

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM