"倍率"子类java

时间:2015-10-22 11:00:59

标签: java override subclass

这是一个菜鸟问题,但我无法弄明白。

这是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"。我还希望能够创建更多覆盖'呼叫'用自己的字符串。我应该做什么呢?

2 个答案:

答案 0 :(得分:6)

您无法覆盖实例变量。您只能覆盖方法。您可以覆盖sound方法(一旦将其更改为实例方法,因为无法覆盖静态方法),或者您可以覆盖sound将调用的方法(例如{ {1}})。然后每只动物都可以返回自己的声音:

getSound()

答案 1 :(得分:0)

永远不会覆盖变量,因此无法替换supercall变量的子类变量。 另一个选择是覆盖方法,但是静态的静态也不能被覆盖。

因此,除非您希望覆盖非静态方法,否则使用当前设置是不可能的。