2017-07-29 108 views
-2

有人可以解釋我的機制當基類對象使用派生類初始化時會發生什麼。什麼是對象的類型,對象是作爲基礎還是派生的?基類變量使用派生類初始化

+0

如何編寫代碼和調試自己呢? –

+0

「基類對象使用派生類初始化」或_base類引用使用派生類object_初始化? –

+0

我認爲這個問題對於網站來說過於寬泛 - 因爲它可能涉及一些公正的解釋。 –

回答

1

對象的類型不會更改,因此該對象將表現爲派生類的對象。

但由於變量的類型是基類,因此不能直接訪問派生類的類成員。因此,必須在基類中聲明方法並在派生類中重寫它們以使用派生類的特徵。

請注意,這僅適用於靜態類型變量(如Java,C++,C#)的語言。

下面是Java中的一個簡單的例子:

class BaseClass { 

    public void info() { 
     System.out.println("base class"); 
    } 
} 

class DerivedClass extends BaseClass { 

    @Override 
    public void info() { 
     System.out.println("derived class"); 
    } 

    public void specialMethod() { 
    } 
} 

public class Test { 

    public static void main(String[] args) { 
     BaseClass b = new DerivedClass(); 
     b.info(); 
     System.out.println("Type of b: " + b.getClass()); 
     // not allowed: 
     // b.specialMethod(); 
    } 
} 

這將產生以下輸出:

derived class 
Type of b: class DerivedClass