多型面試題

2021-09-26 09:19:07 字數 1677 閱讀 4821

題目的**如下:

class a   

public string show(a obj)  

}     

class b extends a  

public string show(a obj)   

}    

class c extends b{}   

class d extends b{}  

a a1 = new a();        

a a2 = new b();     

b b = new b();     

c c = new c();    

d d = new d();

問題:以下輸出結果是什麼?

核心要旨:(子類物件的資料型別可以自動轉型為父類型別,父類物件的資料型別轉型為子類型別,則需要強制型別轉換。)

system.out.println(a1.show(b));          

a and a

// 將b類物件作為引數傳入a類物件的show方法中,b類為a類的子類,所以b類物件的資料型別會自動轉型為a類;故呼叫show(a obj)

system.out.println(a1.show(c));        

a and a

// 同上,c類物件會自動型別轉換兩次,轉換為c類的爺爺類——a類型別;

system.out.println(a1.show(d));        

a and d

system.out.println(a2.show(b));         

b and a

// 因為是向上轉型(子類物件賦值給父類變數),所以父類的引用變數a2無法訪問子類的特有的屬性和方法;即a2無法訪問b類的 public string show(b obj)這個方法; 但可以訪問繼承自父類的那些方法,所以呼叫的是  public string show(a obj) 這個方法。  

system.out.println(a2.show(c));        

b and a

// 子類物件c的資料型別可以自動轉型轉型兩次,為爺爺類型別a類,所以呼叫的是b類的

public string show(a obj) 這個方法。   

system.out.println(a2.show(d));         

a and d

//  因為b類繼承父類a類,故也預設繼承了a類的所有方法(私有的不可訪問),所以此時呼叫的是b類中繼承自a類的public string show(d obj)  這個方法;

system.out.println(b.show(b));         

b and b

system.out.println(b.show(c));         

b and b

// c類物件c的資料型別會自動轉型為父類b類,故呼叫的是 public string show(b obj)這個方法;  

system.out.println(b.show(d));

a and d

// 呼叫的是b類中繼承自a類的public string show(d obj)  這個方法;

面試題 多型

多型是物件導向的第三大特性 封裝 繼承 多型 用以描述現實世界中同一事物的不同形態。比如,西服 t恤和夾克都繼承至 衣服 它們都是衣服的一種形態。多型的三個條件 子類繼承父類 子類重寫父類方法 向上轉型 此外還有抽象類的多型和介面的多型 子類繼承父類 有靜態和非靜態方法分別輸出靜態和非靜態變數,子類...

C 多型面試題

答 多型是物件導向的重要特性之一,它是一種行為的封裝,是同一種事物所表現出的多種形態,簡單地說是 乙個介面多種實現 有兩種型別的多型性 編譯時的多型性。編譯時的多型性是通過過載來實現的。執行時的多型性。執行時的多型性是通過虛成員實現的。1.從儲存空間角度。虛函式對應乙個vtable,這個vtable...

多型相關面試題

多型 同樣的呼叫語句有多種不同的表現形態 同樣乙個函式在不同的子類 父類中穿梭的時候表現出不同的形態。有繼承 有virtual重寫 有父類指標指向子類物件。是通過虛函式重寫實現。virtual關鍵字,告訴編譯器這個函式要支援多型 不是根據指標型別判斷如何呼叫 而是要根據指標所指向的實際物件型別來判斷...