java中的類的向上轉型向下轉型問題

2021-06-26 06:23:37 字數 1526 閱讀 7286

廢話不多說,先寫乙個例子方便後面的嘮叨.

向上!!!!

class a

void tell1()

void saya()

}class b extends a

void sayb()

}public class demo

}

在上面的例子裡面定義了兩個類,乙個父子a  乙個子類b

在這裡大家比較迷茫包括我剛開始學的時候不明白a這個例項化之後裡面是什麼東西.

首先寫出我自己的記憶方式:    

向上轉了之後,也就是a的例項了,也就是裡面的東西自然就是a的東西了.

大家會認為我上面剛才說的是廢話: 

正解:  a裡面的東西包含的事a裡面的東西.用**表示就是

class a

void saya()

}

在**中大家看了,其中a保留了a中的原有屬性a,原來的方法saya(),丟掉了b中的b中的sayb(),同時裡面的tell方法保留的是重寫之後的方法。通過自己執行之後的發現出現的n竟然等於0.0  不是1。

對這個是1不是0的解釋:  a.n呼叫的是類a中的n,但是在實際的a.tell()中使用的是b中的tell() ;

用我們老師對向上轉型的解釋 就是:

繼承之後的b類中有double型的n,複寫之後的方法tell(), 繼承來的tell1(),tella()   還有自己的sysb() .

轉型之後的a擁有的就是上面**中的東西了。

上面解釋之中我有一些基礎的東西隱藏了, 讀者自行理解。

向下!!!

這裡面會結合我自己自學時候的一些知識。

先來乙個例子。

int x = 2 ;

float a = (float)x;

x++ ;

這時候x出來的結果是3 不是3.0

至於為什麼讀者自己理解。 

同樣的在向下的時候也就是這樣的。看個**

class a

void tell1()

void saya()

}class b extends a

void sayb()

}public class demo

}

上面的例子之中a還是第乙個例子之中的a沒有任何的變化。

b就是乙個典型的b類了。這個時候可以認為和a類沒有任何的關係了。

在擴充套件一點知識:向下不能隨便的向下轉的。只能向自己的子孫轉。上面的例子中因為開始有了向上轉了(因為有繼承,所以可以向上轉) 在這個基礎之上就可以向下轉了。如果沒有這個過程的話,不能隨便的鄉下轉型的。這時候一般會用到instantceof關鍵字來確定兩者之間有老子和兒子的關係。。  

第一次這個用心的寫東西。寫的有點抽象,不過我可以斷定,如果你看懂了話。你不僅僅會學到轉型的東西  還會知道隱藏  instantce0f 的用法,我寫東西比較喜歡擴充套件。

一家之言,歡迎排磚。

java中的向上轉型和向下轉型

向下轉型 子類引用指向父類引用的子類物件,有點抽象,下面會舉個例子 向上轉型 父類引用指向子類的物件時稱為向上轉型 employee employee new manager 向上轉型 manager manager manager employee 向下轉型 編譯 執行通過,因為employee本...

Java向上向下轉型

向上轉型 b extends a,a a new b 就是向上轉型,此時a的型別為a,指向b,可以理解為把子類物件轉換成了父類物件,即父類的引用指向子類的物件,此時a不能呼叫子類自己新建的方法和變數,但若子類中重寫了父類的某個方法,那麼在呼叫這個方法時,將會呼叫子類的這個方法。向上轉型不存在風險 向...

java中向上轉型和向下轉型

轉型是在繼承的基礎上而言的,繼承是物件導向語言中,復用的一種機制,通過繼承,子類可以復用父類的功能,如果父類不能滿足當前子類的需求,則子類可以重寫父類中的方法來加以擴充套件。向上轉型 子類引用的物件轉換為父類型別稱為向上轉型。通俗地說就是是將子類物件轉為父類物件。此處父類物件可以是介面 向下轉型 父...