父子類的向上轉型和向下轉型

2021-08-04 16:33:03 字數 1047 閱讀 2666

首先從乙個例子看:
class a  

static int g(int n)

} class b extends a

static int g(int n)

} public class printmethod

}

輸出的結果為:98.0和9

解析:a a = new b( )

;(b是

a的子類

)將a的索引指向

b的物件

a;建立了乙個

a型別,

b的乙個物件;也就是建立了乙個

b的物件a,是

a型別的。也就是向上轉型;

由於子類可以繼承父類的靜態方法,但是不能重寫父類的靜態方法,所以本題中

a.g(3)是呼叫的是父類的g()方法;而a.f(10.0, 8.0)則是呼叫的是子類的f()方法。

注:不論向上或者向下轉型,

「編譯看左邊,執行看右邊」。也就是編譯時候,會看左邊引用型別是否能正確編譯通過,執行的時候是呼叫右邊的物件的方法。

從下面的乙個例子來再一次說明:

例子:

a a = new b();例項化乙個子類物件

a,這個是典型的多型

相當於:動物 a=new狗();

//這就為向上轉型   

a.發聲

();  //物件a

可以使用動物中的發聲

()或其他方法,但不可以呼叫狗的方法。

a a = new a();例項化乙個父類的物件a

動物 a=new狗

();狗

b=(狗)a;

//這裡是向下轉型

這時b可呼叫動物類未被重寫的方法和狗類所有方法(包括重寫動物類的方法)

向上轉型都會成功,是安全的。

就像說狗是動物沒問題。但通過b若呼叫 動物 或 狗類中任意方法都報異常,也就是說向下轉型可能會出錯 不能說動物是狗

向上轉型和向下轉型

向上轉型 子類向上轉型為父類 注意點 轉型後父類與子類的同名函式中,子類的函式可以覆蓋父類的函式,但子類自己定義的函式將被隱藏 class a public void a2 class b extends a public void b2 public class c 向下轉型 父類被強制轉型為子類...

向上轉型和向下轉型

例如我現在有兩個類,他們之間是繼承的關係 class animal class dog extends animal void bark 通俗地講,向上轉型就是把子類的物件轉化為父類的物件,如 animal animal new dog 但是注意,向上轉型後,父類只能訪問與子類共有的方法,如以下 就...

向上轉型和向下轉型

在j a中,繼承是乙個重要的特徵,通過extends關鍵字,子類可以復用父類的功能,如果父類不能滿足當前子類的需求,則子類可以重寫父類中的方法來加以擴充套件。而在應用中就存在著兩種轉型方式。比如有父類parent,子類child1.向上轉型 父類的引用指向子類的例項parent p new chil...