小编use*_*311的帖子

Java不继承访问器方法?

给定一个类"Bar",扩展类"Foo",实现接口"DeeDum"

public interface DeeDum {
    public String getDee();
    public String getDum();
}

public class Foo implements DeeDum {
    public String dee = "D";
    public String dum;

    public String getDee() { return dee; }
    public String getDum() { return dum; }
}

public class Bar extends Foo {
    public String dee = "DEE";
    public String dum = "DUM";
}
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

public static Bar mybar = new Bar();
Assert.assertEquals("DEE", mybar.getDee());
Assert.assertEquals("DUM", mybar.getDum());
Run Code Online (Sandbox Code Playgroud)

我得到"D"而无效.换句话说,Bar不会从Foo继承访问器,也不能覆盖属性.以某种方式调用mybar.getDum()调用类Foo的静态实例并从父类返回静态属性.即使在子类中重写属性!这是否意味着您不能继承任何方法或属性?

我无法绕过它.为什么Java不能继承访问者(为什么他们选择这样一个奇怪的选择呢?)

或者我只是做错了什么?


实际上,我仍然看到一些奇怪而不确定的东西.如果你有另一个类'Bar'扩展Foo并在初始化块中设置继承的访问器

虽然您可以在上面的块中设置父属性,但它实际上并不为子类创建副本.

它似乎是多个类的非确定性初始化.

因此,如果你有扩展foo和初始化块的Bar和Baz,它们似乎都继承了Bar设置的值.

public …
Run Code Online (Sandbox Code Playgroud)

java inheritance

0
推荐指数
3
解决办法
1397
查看次数

标签 统计

inheritance ×1

java ×1