子类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”。我还希望能够创建更多的类,以其自己的字符串覆盖“调用”。我应该怎么做呢?

他们是

您不能覆盖实例变量。您只能覆盖方法。您可以覆盖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";
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章