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类吗?
答案 0 :(得分:12)
你不能。
无法将Derived.ERROR
投射到Derived
,因为它不是Derived
的实例。这是Base
的实例。
可能有助于消除混淆,意识到Base.ERROR
和Derived.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的实例而不是基类