Java中如何理解父類的引用指向類的物件。。初學者。。?

時間 2021-05-30 11:33:58

1樓:圓胖腫

很簡單,兩個人,a和b,a是領導,a說我要這個這個這個功能,將其寫入介面,交給b去實現,用的時候,a不需要知道b是怎麼實現的,直接用a定義的介面就好了,這樣開發的時候實現和呼叫就可以分離,用模擬測試等軟體就更方便了

2樓:EmiyaGm

你是說父類引用指向子類物件吧,你可以先去看一下向上轉型,才好理解多型性。

舉個例子:

我定義了乙個子類Cat,它繼承了Animal類,那麼後者就是前者是父類。我可以通過 Cat c = new Cat(); 例項化乙個Cat的物件,這個不難理解。

但當我這樣定義時: Animal a = new Cat();

表示定義了乙個Animal型別的引用,指向新建的Cat型別的物件。由於Cat是繼承自它的父類Animal,所以Animal型別的引用是可以指向Cat型別的物件的。

那麼這樣做有什麼意義呢?因為子類是對父類的乙個改進和擴充,所以一般子類在功能上較父類更強大,屬性較父類更獨特,定義乙個父類型別的引用指向乙個子類的物件既可以使用子類強大的功能,又可以抽取父類的共性。

所以,父類型別的引用可以呼叫父類中定義的所有屬性和方法,而對於子類中定義而父類中沒有的方法,它是無可奈何的; 同時,父類中的乙個方法只有在父類中定義而在子類中沒有重寫的情況下,才可以被父類型別的引用呼叫; 對於父類中定義的方法,如果子類中重寫了該方法,那麼父類型別的引用將會呼叫子類中的這個方法,這就是動態連線。也可以叫做動態繫結。

動態繫結是指」在執行期間(而非編譯期間)「判斷所引用物件的實際型別,根據實際的型別呼叫其相應的方法。

補充:父類引用指向子類物件,提高了程式可擴充套件性,如程式中有Dog d=new Dog();如果什麼時候想用貓了改動就比較大了,但是如果Animal d=new Dog();想用貓就只需要改這一句Animal d=new Cat();,程式後面的方法都不用改。

多型,減少耦合,可移植都是他的優點。

java中父類有static修飾的方法其子類能繼承嗎?若子類也有該方法,是覆蓋還是重寫?

山月風成 靜態方法只與類有關,不與例項有關,重寫只適用於例項方法,不適用於靜態方法。非靜態方法,按重寫規則,呼叫相應的類的實現方法,而靜態方法只與類有關。因為靜態方法是程式一執行就已經分配好了記憶體位址,而且該位址是固定的,所有引用到該方法的物件 父類或者子類 所指向的始終是同乙個記憶體位址中的資料...

深入理解Java的分級引用模型

格仔塗過的夏天 大學的學習時刻很自在,一周抽出兩次晚自習時刻看書些作業就能夠了。其實不必憂慮,班長工作和學習能夠兩不誤的,不要覺得很難,親身領會後你就會發現自己其實很強壯的,加油哦 呵呵加油了我也在大學榜首學期做過班長後轉戰學生會 團總支 現奮戰於黨支部。我覺得作為乙個學生幹部,首要自己要有比較強的...

為什麼物件導向中的父類叫父類,而不叫母類?

一無所知 1 如果叫母類那你又要問 為什麼物件導向中的母叫母類,而不叫父類.2 parent class翻譯成父類,和負累同音,知道什麼意思了吧 liujunsong 中文語境由於兩千年的積累,有很多成語,對語言使用起到了潛移默化的影響。在中文裡面,父子是預設的對仗,因此有了子類,對應的就有父類。上...