廢話不多說,先寫乙個例子方便後面的嘮叨.
向上!!!!
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中向上轉型和向下轉型
轉型是在繼承的基礎上而言的,繼承是物件導向語言中,復用的一種機制,通過繼承,子類可以復用父類的功能,如果父類不能滿足當前子類的需求,則子類可以重寫父類中的方法來加以擴充套件。向上轉型 子類引用的物件轉換為父類型別稱為向上轉型。通俗地說就是是將子類物件轉為父類物件。此處父類物件可以是介面 向下轉型 父...