1. 程式人生 > >父類物件和子類物件之間可以相互轉換嗎

父類物件和子類物件之間可以相互轉換嗎

可以相互轉換。但是若父類物件想轉換為子類物件,父類物件一定是用子類物件初始化的。

 

那麼父類物件如何用子類物件初始化呢?

假設父類為A,子類為B,那麼用子類初始化程式碼為:

A a=new B()

這就相當於我們用父類的控制代碼指向了子類的空間,如下圖所示:

 

 此時我們若將a強制轉換為子類物件:

B b=(B)a;//相當於B a=new B()

 相當於用子類控制代碼指向了子類物件空間,因此只是換了個控制代碼而已!

 

然而,假如我們的父類未用子類物件初始化:

A a=new A()

 

這樣如果我們要強轉為子類控制代碼指向子類物件空間,不僅要更換控制代碼,空間也要重新分配,各種變數也要重新初始化,開銷很大,編譯器不會允許通過的。

而若是子類物件轉父類物件,只需更換控制代碼使父類控制代碼指向子類物件空間即可。

 

注意:實際是父類控制代碼指向子類物件空間,所以使用的屬性和方法都是子類物件所有的。而因為是父類的控制代碼指向的只能是父類所擁有的屬性和方法,所以指向的屬性和方法實則又必須是是從父類繼承而來的。