Java中的静态变量继承

时间:2012-02-07 11:31:32

标签: java inheritance static

public class Base{
        protected String str;

    public static final Base ERROR = new Base("error");
...
}

public class Derived extends Base{
        public static final Derived OTHER = new DERIVED("other");
        public Derived(String str) {
        super(str);
        }
    }

Derived page = Derived.OTHER; //OK
page = (Drived)Derived.ERROR; //ClassCastException

那么我可以将静态成员变量从Base转换为Derived类吗?

5 个答案:

答案 0 :(得分:12)

你不能。

无法将Derived.ERROR投射到Derived,因为它不是Derived 的实例。这是Base的实例。

可能有助于消除混淆,意识到Base.ERRORDerived.ERROR是引用同一对象的两种方式。

答案 1 :(得分:4)

Derived.ERROR指的是与Base.ERROR完全相同的对象,该对象属于Base类,因此无法转换为Derived

答案 2 :(得分:1)

父级无法转发给Child。这可以通过以下示例简单地理解:

public class Parent
{
    public void parentMethod() { }
}


public class Child extends Parent
{
    public void childMethod() { }
}

   .....
Parent parent = new Parent();

因此,如果我们能够将Parent对象转换为Child,这意味着我们可以在childMethod()对象上调用parent,这对象不对{{1类型parent的类型没有Parent方法。

我希望我的解释不会令人困惑。

答案 3 :(得分:0)

静态变量不是绑定到实例,而是绑定到类

答案 4 :(得分:0)

不......你不能这样做..因为你必须把它作为Derive Class的实例而不是基类