首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类java中的“覆盖”超类成员

子类java中的“覆盖”超类成员
EN

Stack Overflow用户
提问于 2015-10-22 11:00:59
回答 2查看 1.1K关注 0票数 5

有点小问题,这个,但我想不出来。

我是animal.java。我想让它成为所有动物子类的超类。它与所有子类都在同一个包中。

代码语言:javascript
复制
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

代码语言:javascript
复制
class Cow extends Animal {
    call = "moo";
}

显然,这是行不通的。但是我希望能够运行Cow.sound()并让输出读为"moo“。我还希望能够创建更多用自己的字符串覆盖“调用”的类。我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-22 11:06:44

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

代码语言:javascript
复制
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";
    }
}
票数 6
EN

Stack Overflow用户

发布于 2015-10-22 11:09:12

变量永远不会被覆盖,所以子类变量替换超级调用变量是不可能的。另一个选项是重写该方法,但是它的静态、静态也不能被重写。

因此,对于当前的设置,这是不可能的,除非您寻找覆盖非静态方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33279438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档