Java中静态变量的继承

3
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类吗?

1
在进行类型转换时,使用instanceOf进行验证是否适合进行强制类型转换是一个很好的实践。 - tartak
5个回答

12

你做不到。

无法将 Derived.ERROR 强制转换为 Derived,因为它不是 Derived 的实例,而是 Base 的实例。

可能有助于消除混淆的是,Base.ERRORDerived.ERROR 是指向同一个对象的两种方式。


4

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


1

父类无法转换为子类。这可以通过以下示例简单理解:

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


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

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

所以,如果我们能够将Parent对象强制转换为Child,这意味着我们可以在parent对象上调用childMethod(),但这是不正确的,因为parent对象的类型为Parent,它没有childMethod()方法。
我希望我的解释不会让人困惑。

0

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


0

不行...你不能这样做...因为你必须将它实例化为派生类的实例,而不是基类的实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接