繁体   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