java子類(lèi)繼承父類(lèi)實(shí)例 JAVA子類(lèi)繼承父類(lèi),然后用父類(lèi)去new這個(gè)子類(lèi)的對(duì)象,這樣做的意義在哪?
JAVA子類(lèi)繼承父類(lèi),然后用父類(lèi)去new這個(gè)子類(lèi)的對(duì)象,這樣做的意義在哪?例如,如果父類(lèi)的構(gòu)造函數(shù)帶參數(shù),則子類(lèi)的構(gòu)造函數(shù)中的第一句話(huà)是super(…)。注意:調(diào)用子類(lèi)構(gòu)造函數(shù)時(shí),首先調(diào)用父類(lèi)構(gòu)造函數(shù)
JAVA子類(lèi)繼承父類(lèi),然后用父類(lèi)去new這個(gè)子類(lèi)的對(duì)象,這樣做的意義在哪?
例如,如果父類(lèi)的構(gòu)造函數(shù)帶參數(shù),則子類(lèi)的構(gòu)造函數(shù)中的第一句話(huà)是super(…)。注意:調(diào)用子類(lèi)構(gòu)造函數(shù)時(shí),首先調(diào)用父類(lèi)構(gòu)造函數(shù),然后調(diào)用子類(lèi)構(gòu)造函數(shù)。如果要調(diào)用父類(lèi)而不是子類(lèi)的成員,可以:super。不創(chuàng)建父類(lèi)的實(shí)例。如果你能創(chuàng)建一個(gè)父類(lèi)的實(shí)例,我可以舉一個(gè)反例來(lái)說(shuō)明這是錯(cuò)誤的:當(dāng)父類(lèi)是抽象類(lèi)而子類(lèi)不是抽象類(lèi)時(shí),子類(lèi)在調(diào)用構(gòu)造函數(shù)時(shí)也會(huì)調(diào)用父類(lèi)構(gòu)造函數(shù),創(chuàng)建子類(lèi)和父類(lèi)的兩個(gè)實(shí)例。但是,抽象類(lèi)不能實(shí)例化。原來(lái)的假設(shè)是錯(cuò)誤的。因此,不會(huì)創(chuàng)建父類(lèi)。理論理解:當(dāng)用構(gòu)造函數(shù)添加new時(shí),會(huì)創(chuàng)建一個(gè)對(duì)象(實(shí)例)。調(diào)用子類(lèi)構(gòu)造函數(shù)時(shí),調(diào)用父類(lèi)構(gòu)造函數(shù)是初始化子類(lèi)從父類(lèi)繼承的部分。此過(guò)程不對(duì)父類(lèi)使用new,因此不會(huì)為父類(lèi)創(chuàng)建對(duì)象(實(shí)例)。
java什么是父類(lèi)對(duì)象為子類(lèi)對(duì)象的實(shí)例?
例如,有一個(gè)父類(lèi)基類(lèi)及其子類(lèi)子類(lèi),然后有以下代碼:baseinstance=newchild()。在這種情況下,實(shí)例引用的類(lèi)型是base,即父類(lèi)型,但這意味著instance newchild()是subtype的實(shí)例,即父類(lèi)對(duì)象是subclass實(shí)例,這是面向?qū)ο缶幊讨卸鄳B(tài)性的一個(gè)表達(dá)式,而且這個(gè)表達(dá)式必須符合黎曼替換原理
如果a是父類(lèi),B是子類(lèi),那就錯(cuò)了。如果反過(guò)來(lái)是真的。
子類(lèi)對(duì)象可以分配給聲明為父類(lèi)的變量:A=new b(),但在這種情況下,A只能調(diào)用父類(lèi)A中聲明的方法和屬性,而不能調(diào)用子類(lèi)b中聲明的方法和屬性。如果這樣編寫(xiě),通常會(huì)發(fā)生類(lèi)型轉(zhuǎn)換錯(cuò)誤。你可以試試。建議看一下Java類(lèi)型轉(zhuǎn)換,這一點(diǎn)非常清楚。
java中允許子類(lèi)的引用指向父類(lèi)的對(duì)象嗎?比如A是父類(lèi)B是子類(lèi) 可以像這樣寫(xiě)嗎: B b=new A()?
讓我告訴你一些關(guān)于多態(tài)性的事情。多態(tài)性有三個(gè)條件
1。繼承
2。重寫(xiě)
3。父類(lèi)對(duì)子類(lèi)的對(duì)象的引用應(yīng)該是一個(gè)重寫(xiě)方法,因此將有具有相同名稱(chēng)和參數(shù)的方法。Java虛擬機(jī)在編譯時(shí)不知道如何加載它們