[英]Static variables inheritance in Java
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類嗎?
你不能。
無法將Derived.ERROR
為Derived
因為它不是Derived
的實例 。 這是Base
的一個實例。
它可能有助於消除混淆,以實現Base.ERROR
和Derived.ERROR
是兩種引用同一對象的方法。
Derived.ERROR
指的是與Derived.ERROR
完全相同的對象,並且該對象屬於Base
類,因此無法Base.ERROR
為Derived
。
父母不能被投射到兒童。 通過以下示例可以簡單地理解這一點:
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()
方法。
我希望我的解釋不會令人困惑。
靜態變量不是綁定到實例而是綁定到類
不......你不能這樣做。因為你必須把它作為Derive Class的實例而不是基類
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.