簡體   English   中英

Java中的靜態變量繼承

[英]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.ERRORDerived因為它不是Derived的實例 這是Base的一個實例。

它可能有助於消除混淆,以實現Base.ERRORDerived.ERROR是兩種引用同一對象的方法。

Derived.ERROR指的是與Derived.ERROR完全相同的對象,並且該對象屬於Base類,因此無法Base.ERRORDerived

父母不能被投射到兒童。 通過以下示例可以簡單地理解這一點:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM