今天遇到了這樣的一段**:
public inte***ce a
public class b:a
在使用時是這樣的:a a=new b();
看到這的時候我就產生了一點疑問,為什麼不用b a=new b()?
在問朋友時,朋友跟我解釋說:可能是這樣的道理,比如說人是乙個介面,老人和小孩這兩個類都派生於這個介面,對與乙個人來說可以是老人也可以是小孩。
哦,我明白了,按照朋友的話說,就是如果定義的是a的變數就既可以指向b 又可以指向其他派生於a的類,這樣說的話也有道理。
同時,朋友又給出了另一種解釋:
using system ;
inte***ce isequence
}inte***ce iring
inte***ce iringsequence: isequence, iring
class ctest
}這樣說來,也就是如果乙個類繼承自多個介面並且這些介面中含有相同的變數,那麼通過上面的那種賦值方法就可以準確的知道這個類到底是呼叫的哪個介面的實現變數,那中強制型別轉換跟賦值達到的是同一種的效果。
我突然記起好像在設計模式那本書中的某個模式正是運用的向上轉型,但是具體細節有些記不清了。
so 此文未完待續。。。。。
向下轉型,向上轉型
package cn.dali.code24 向上轉型 父類引用指向子類物件 格式 父類名稱 物件名 new 子類名稱 向下轉型 當我們使用父類引用指向子類物件的時候,我們想把父類物件轉為子類物件時,需要向下轉型 向下轉型就是乙個還原動作。格式 子類名稱 物件名 子類名稱 父類物件 注意 乙個父類有...
向上轉型向下轉型
在引用資料型別中,只有有繼承關係的型別才能進行型別轉換 型別轉換只是轉換看待物件的引用的型別,物件本身沒有也不可能參與轉換 父類引用可以自動指向子類物件,但只能訪問和呼叫到來自於父類的屬性和行為 子類的引用不能指向父類或其它子類物件,就算強轉也會導致執行失敗並丟擲classcastexception...
向上轉型和向下轉型
向上轉型 子類向上轉型為父類 注意點 轉型後父類與子類的同名函式中,子類的函式可以覆蓋父類的函式,但子類自己定義的函式將被隱藏 class a public void a2 class b extends a public void b2 public class c 向下轉型 父類被強制轉型為子類...