面試題
面向過(guò)程和面向?qū)ο蟮膮^(qū)別
面向過(guò)程和面向?qū)ο蟮闹饕獏^(qū)別在于思想方式和實(shí)現(xiàn)方法钥星。
面向過(guò)程重視步驟和函數(shù)级历,通過(guò)分解問(wèn)題并設(shè)計(jì)函數(shù)來(lái)解決問(wèn)題腥光;
面向?qū)ο髣t更注重對(duì)象和類之間的關(guān)系懒构,將程序中的各種元素組織成一個(gè)有機(jī)整體众羡,在實(shí)現(xiàn)上更加靈活和可擴(kuò)展勋颖。
同時(shí)嗦嗡,面向?qū)ο蟮某绦蚓哂懈叩膹?fù)用性、可維護(hù)性和可讀性饭玲。
類和對(duì)象的關(guān)系
類:定義了對(duì)象應(yīng)具有的特征和?為侥祭,類是對(duì)象的模板。
對(duì)象:擁有多個(gè)特征和?為的實(shí)體,對(duì)象是類的實(shí)例矮冬。
區(qū)別
- 抽象程度不同
類是一種抽象的數(shù)據(jù)結(jié)構(gòu)谈宛,它描述了一組對(duì)象的共同特征,包括屬性和方法等胎署。而對(duì)象則是類的具體化吆录,它包含了類定義的屬性值和方法實(shí)現(xiàn),是具體的實(shí)體琼牧。
- 內(nèi)容不同
類包含了屬性和方法的定義恢筝,但沒有具體的值或?qū)崿F(xiàn)。而對(duì)象則是具有這些屬性值和方法實(shí)現(xiàn)的實(shí)體巨坊,是一個(gè)具體的實(shí)例撬槽。
- 使用方式不同
類是一種模板或者藍(lán)圖,它用于創(chuàng)建對(duì)象趾撵、描述對(duì)象的屬性和行為等侄柔,是對(duì)實(shí)現(xiàn)進(jìn)行了封裝和抽象的結(jié)果。而對(duì)象則是類的具體實(shí)現(xiàn)鼓寺,通過(guò)對(duì)象可以直接訪問(wèn)類中定義的屬性和方法勋拟。
- 存儲(chǔ)位置不同
類通常在代碼中被定義,是靜態(tài)的妈候,存儲(chǔ)于磁盤上敢靡;而對(duì)象則是在程序運(yùn)行時(shí)創(chuàng)建的,存儲(chǔ)于內(nèi)存中苦银。
- 可變性不同
類是一種不可變的數(shù)據(jù)結(jié)構(gòu)啸胧,它定義了一組屬性和方法,但不能直接改變這些屬性和方法的定義幔虏。而對(duì)象則是可變的纺念,可以修改它們的屬性值或?qū)崿F(xiàn)方法。
綜上所述想括,類是一種描述共同特征的抽象數(shù)據(jù)類型陷谱,而對(duì)象是類的一個(gè)具體實(shí)例,包含了類定義的屬性值和方法實(shí)現(xiàn)瑟蜈。類和對(duì)象之間的關(guān)系是類定義了對(duì)象的共同特征烟逊,而對(duì)象實(shí)現(xiàn)了這些特征。兩者的使用方式铺根、存儲(chǔ)位置宪躯、可變性等方面也有所不同。
構(gòu)造方法的作用和特征
構(gòu)造方法是一種可以創(chuàng)建和初始化對(duì)象的特殊方法位迂,用于在對(duì)象創(chuàng)建時(shí)自動(dòng)調(diào)用访雪。
構(gòu)造方法與類同名详瑞,沒有返回值類型,而且可以有多個(gè)重載形式臣缀。
構(gòu)造方法的主要作用如下:
創(chuàng)建對(duì)象:構(gòu)造方法在對(duì)象實(shí)例化的過(guò)程中被自動(dòng)調(diào)用坝橡,用于為對(duì)象分配內(nèi)存空間并初始化其狀態(tài)。沒有構(gòu)造方法肝陪,就無(wú)法創(chuàng)建對(duì)象驳庭。
初始化對(duì)象:構(gòu)造方法可以對(duì)對(duì)象屬性進(jìn)行初始化,為對(duì)象賦予初始的狀態(tài)氯窍。這些屬性可以是類的成員變量或者方法內(nèi)部定義的局部變量饲常。
重載構(gòu)造方法:通過(guò)定義不同參數(shù)的構(gòu)造方法,可以實(shí)現(xiàn)不同的對(duì)象初始化方式狼讨,滿足不同的需求贝淤。
隱藏默認(rèn)構(gòu)造方法:如果沒有顯式定義構(gòu)造方法,編譯器會(huì)自動(dòng)生成一個(gè)默認(rèn)的構(gòu)造方法政供。但是播聪,這個(gè)默認(rèn)構(gòu)造方法并不一定符合要求,會(huì)導(dǎo)致代碼的不可預(yù)期性和安全性問(wèn)題布隔。因此离陶,通過(guò)定義顯式構(gòu)造方法可以隱藏默認(rèn)構(gòu)造方法。
構(gòu)造方法的特征如下:
構(gòu)造方法與類名相同衅檀,且沒有返回值類型招刨,包括void。
構(gòu)造方法可以有多個(gè)重載形式哀军,通過(guò)傳入不同的參數(shù)來(lái)初始化對(duì)象沉眶。
如果沒有顯示定義構(gòu)造方法,則編譯器會(huì)生成一個(gè)默認(rèn)的構(gòu)造方法杉适。
如果顯式定義了構(gòu)造方法谎倔,則需要手動(dòng)調(diào)用其他構(gòu)造方法。這就是構(gòu)造方法的重載猿推。
構(gòu)造方法只能在對(duì)象創(chuàng)建時(shí)被調(diào)用片习,不能像一般方法那樣被復(fù)用。
總之蹬叭,構(gòu)造方法是一種特殊的方法毯侦,其作用是創(chuàng)建和初始化Java對(duì)象。通過(guò)定義不同參數(shù)的構(gòu)造方法可以實(shí)現(xiàn)不同的對(duì)象初始化方式具垫,在Java編程中非常重要。
private试幽、默認(rèn)筝蚕、protected卦碾、public四個(gè)權(quán)限修飾符的作用
在Java中,訪問(wèn)修飾符(access modifiers)是指用來(lái)控制類起宽、變量和方法的可見性和訪問(wèn)權(quán)限的關(guān)鍵字洲胖。Java中有四個(gè)訪問(wèn)修飾符private、默認(rèn)坯沪、protected和public绿映,分別表示不同的訪問(wèn)級(jí)別和訪問(wèn)權(quán)限。
private:私有訪問(wèn)修飾符腐晾,用于限制只有本類中才能訪問(wèn)該成員(屬性或方法)叉弦,其他類無(wú)法訪問(wèn)。一般用于保護(hù)對(duì)象的屬性藻糖,可以提高程序的安全性和封裝性淹冰。
默認(rèn):默認(rèn)訪問(wèn)修飾符,也稱為包訪問(wèn)修飾符(package-level access modifier)巨柒。在沒有顯式定義訪問(wèn)修飾符時(shí)樱拴,該成員默認(rèn)為默認(rèn)訪問(wèn)權(quán)限,只有在同一包中的類才能訪問(wèn)該成員洋满。
protected:受保護(hù)訪問(wèn)修飾符晶乔,用于限制只有本類、子類和同一包中的其他類才能訪問(wèn)該成員牺勾。一般用于實(shí)現(xiàn)繼承和類方法的封裝正罢。
public:公共訪問(wèn)修飾符,用于標(biāo)識(shí)該成員可以被任意類所訪問(wèn)禽最。在許多情況下腺怯,將方法和變量聲明為public不是很安全,因?yàn)檫@會(huì)導(dǎo)致類中的所有細(xì)節(jié)暴露給外部川无。
總之呛占,訪問(wèn)修飾符是Java中控制類、變量和方法可見性和訪問(wèn)權(quán)限的關(guān)鍵字懦趋。private晾虑、默認(rèn)、protected仅叫、public四個(gè)訪問(wèn)修飾符可以在Java程序中用來(lái)限定成員的訪問(wèn)級(jí)別和訪問(wèn)權(quán)限帜篇。在設(shè)計(jì)類時(shí),要根據(jù)具體情況選擇合適的訪問(wèn)修飾符诫咱,不僅能保證數(shù)據(jù)封裝和安全性笙隙,還能提高程序的可讀性和可維護(hù)性。
注意 :
訪問(wèn)權(quán)限修飾符都是成員修飾符,只能修飾成員不能修飾局部
default是默認(rèn)的,沒有顯示的通過(guò)其他訪問(wèn)權(quán)限修飾符進(jìn)行修飾,默認(rèn)通過(guò)default修飾
能夠用來(lái)修飾類的訪問(wèn)權(quán)限修飾符 : public | default
訪問(wèn)被protected修飾的成員
- 同包類下訪問(wèn)
- 不同包下的子類中,通過(guò)繼承關(guān)系訪問(wèn)
方法重載和方法重寫的區(qū)別
實(shí)現(xiàn)重載條件 :
- 一個(gè)類中的多個(gè)方法
- 方法名相同
- 參數(shù)列表不同|方法簽名不同 (參數(shù)類型坎缭、參數(shù)個(gè)數(shù)竟痰、參數(shù)順序)
方法重載的目的是為了提供更加靈活的方法調(diào)用方式签钩。在調(diào)用方法時(shí),編譯器會(huì)根據(jù)參數(shù)類型和數(shù)量自動(dòng)選擇最合適的方法坏快。方法重載的返回值類型可以相同也可以不同铅檩,但是不能僅僅是返回類型不同。
實(shí)現(xiàn)重寫的條件 :
- 兩個(gè)類中的兩個(gè)方法
- 繼承|實(shí)現(xiàn)關(guān)系
- 方法簽名相同
方法重寫的目的是為了改變父類方法的實(shí)現(xiàn)細(xì)節(jié)莽鸿,增強(qiáng)程序的可讀性和可維護(hù)性昧旨。當(dāng)程序調(diào)用子類中被重寫的方法時(shí),實(shí)際上執(zhí)行的是重寫后的子類方法祥得。
使用重寫前提需求:當(dāng)子類對(duì)從父類中所繼承的功能滿意,但是功能的實(shí)現(xiàn)不滿意的時(shí)候,在子類中重寫實(shí)現(xiàn)這個(gè)功能->重寫
在Java中兔沃,方法重載(overloading)和方法重寫(overriding)是兩種常用的面向?qū)ο缶幊谈拍睿鼈兙哂胁煌奶攸c(diǎn)和作用啃沪。
方法重載:是指在同一個(gè)類中定義多個(gè)方法粘拾,它們具有相同的方法名,但是參數(shù)列表不同(參數(shù)類型创千、參數(shù)個(gè)數(shù)缰雇、參數(shù)順序)。方法重載的目的是為了提供更加靈活的方法調(diào)用方式追驴。在調(diào)用方法時(shí)械哟,編譯器會(huì)根據(jù)參數(shù)類型和數(shù)量自動(dòng)選擇最合適的方法。方法重載的返回值類型可以相同也可以不同殿雪,但是不能僅僅是返回類型不同暇咆。
方法重寫:是指子類繼承父類后,重新定義該父類中的某個(gè)方法丙曙,使得子類擁有與父類相同的名稱爸业、參數(shù)列表和返回類型的方法。方法重寫的目的是為了改變父類方法的實(shí)現(xiàn)細(xì)節(jié)亏镰,增強(qiáng)程序的可讀性和可維護(hù)性扯旷。當(dāng)程序調(diào)用子類中被重寫的方法時(shí),實(shí)際上執(zhí)行的是重寫后的子類方法索抓。
區(qū)別:
方法重載是指同一個(gè)類中钧忽,方法名相同,但是參數(shù)列表不同逼肯,返回值類型可以相同也可以不同耸黑。而方法重寫是指子類重新定義父類中的方法,方法名篮幢、參數(shù)列表和返回值類型必須與父類完全一致大刊。
方法重載是編譯時(shí)多態(tài),即在編譯期確定該調(diào)用哪個(gè)方法三椿;而方法重寫是運(yùn)行時(shí)多態(tài)缺菌,即在程序運(yùn)行期間才能確定調(diào)用哪個(gè)方法曲尸。
方法重載主要用于提供不同的方法調(diào)用方式,增加代碼的靈活性男翰。方法重寫主要用于改變父類方法的實(shí)現(xiàn)細(xì)節(jié),擴(kuò)展程序的功能纽乱。
總之蛾绎,方法重載和方法重寫都是Java中常用的面向?qū)ο缶幊谈拍睿鼈兎謩e用于提供不同的方法調(diào)用方式和改變父類方法的實(shí)現(xiàn)細(xì)節(jié)鸦列。掌握它們的特點(diǎn)和使用場(chǎng)景租冠,可以讓你的Java程序更加靈活和可維護(hù)。
java.lang.Object類的六個(gè)常用方法的聲明并說(shuō)明其作用薯嗤。
- public boolean equals(Object obj)
這個(gè)方法用于比較兩個(gè)對(duì)象是否相等顽爹。默認(rèn)情況下,equals()方法將比較兩個(gè)對(duì)象的引用地址是否相等骆姐,即是否為同一個(gè)對(duì)象镜粤。如果需要比較對(duì)象的值是否相等,則需要在子類中覆寫equals()方法玻褪。在覆寫時(shí)需要注意肉渴,需要滿足自反性、對(duì)稱性带射、傳遞性和一致性等特點(diǎn)同规。- public int hashCode()
這個(gè)方法返回當(dāng)前對(duì)象的哈希碼,哈希碼是根據(jù)對(duì)象的內(nèi)部信息生成的一個(gè)整數(shù)窟社,可以用于快速查找對(duì)象券勺,比如在集合類中使用。hashCode()方法的默認(rèn)實(shí)現(xiàn)會(huì)返回對(duì)象的內(nèi)存地址灿里,但是可以在子類中重新定義关炼。- public String toString()
這個(gè)方法返回表示該對(duì)象的字符串,通常建議程序員重載這個(gè)方法钠四,以便打印對(duì)象的屬性或其他有用信息盗扒。- public final native Class<?> getClass()
這個(gè)方法返回對(duì)象所屬的類Class對(duì)象。由于Object是所有類的父類缀去,因此在Java中每個(gè)對(duì)象都可以調(diào)用getClass()方法侣灶。這個(gè)方法是用本地代碼實(shí)現(xiàn)的。- public final void notify()
- public final void notifyAll()
這兩個(gè)方法是用于線程間通信的方法缕碎,用于激活處于等待狀態(tài)下的線程褥影。notify()方法隨機(jī)喚醒一個(gè)處于等待狀態(tài)的線程,而notifyAll()方法喚醒所有處于等待狀態(tài)的線程咏雌,讓它們重新競(jìng)爭(zhēng)執(zhí)行權(quán)凡怎。
繼承條件下子類構(gòu)造方法的執(zhí)行過(guò)程
1校焦、在執(zhí)行子類構(gòu)造方法之前,會(huì)隱式地調(diào)用父類的無(wú)參構(gòu)造方法统倒,以保證父類的實(shí)例變量可以被正確初始化寨典。如果父類沒有無(wú)參構(gòu)造方法,并且在子類中沒有顯式調(diào)用父類的其他構(gòu)造方法房匆,則編譯器會(huì)報(bào)錯(cuò)耸成。
2、執(zhí)行子類構(gòu)造方法浴鸿,子類構(gòu)造方法可以調(diào)用子類自身的其他構(gòu)造方法或者父類的有參構(gòu)造方法井氢。
3、如果子類構(gòu)造方法調(diào)用了子類自身的其他構(gòu)造方法岳链,則該構(gòu)造方法必須是子類中定義的其它構(gòu)造方法的第一個(gè)語(yǔ)句花竞,否則編譯器會(huì)報(bào)錯(cuò)。4掸哑、如果子類構(gòu)造方法顯式地調(diào)用了父類的有參構(gòu)造方法约急,則需要使用關(guān)鍵字super顯式調(diào)用,同時(shí)指定父類構(gòu)造方法所需要的參數(shù)举户。調(diào)用父類構(gòu)造方法的語(yǔ)句也必須是子類構(gòu)造方法中的第一條語(yǔ)句烤宙。如果子類構(gòu)造方法中沒有顯式調(diào)用父類的構(gòu)造方法,則編譯器會(huì)隱式地調(diào)用父類的無(wú)參構(gòu)造方法俭嘁。
4躺枕、子類構(gòu)造方法執(zhí)行完畢后,將返回一個(gè)新創(chuàng)建的子類對(duì)象供填。
super關(guān)鍵字的作用和使用
調(diào)用父類的構(gòu)造方法:在子類構(gòu)造方法中拐云,可以使用super關(guān)鍵字來(lái)調(diào)用父類構(gòu)造方法,以保證父類的實(shí)例變量能夠被正確初始化近她。使用super關(guān)鍵字調(diào)用父類構(gòu)造方法的語(yǔ)法super(參數(shù)列表)叉瘩。
訪問(wèn)父類的成員變量:在子類中,可以使用super關(guān)鍵字來(lái)引用父類中的成員變量粘捎。這樣可以避免子類和父類擁有同名變量時(shí)的命名沖突問(wèn)題薇缅。使用super關(guān)鍵字訪問(wèn)父類成員變量的語(yǔ)法為super.父類成員變量名。
調(diào)用父類的方法:在子類中攒磨,可以使用super關(guān)鍵字來(lái)調(diào)用父類中的方法泳桦。這樣可以避免子類和父類擁有同名方法時(shí)的命名沖突問(wèn)題。使用super關(guān)鍵字調(diào)用父類方法的語(yǔ)法為super.父類方法名(參數(shù)列表)娩缰。
super關(guān)鍵字必須出現(xiàn)在子類方法或構(gòu)造方法的第一條語(yǔ)句上灸撰。
==和equals()的聯(lián)系和區(qū)別
==比較的是兩個(gè)對(duì)象的引用地址是否相等,也就是判斷兩個(gè)對(duì)象是否為同一個(gè)實(shí)例。如果兩個(gè)對(duì)象的引用地址相等浮毯,則==返回true完疫,否則返回false。
equals()比較的是兩個(gè)對(duì)象的內(nèi)容是否相等债蓝。如果兩個(gè)對(duì)象的屬性值相等壳鹤,則equals()返回true,否則返回false饰迹。
多態(tài)的含義和作用
多態(tài)的含義是指同一種類型的對(duì)象器虾,在不同的情況下會(huì)表現(xiàn)出不同的形態(tài)和行為特征。具體來(lái)說(shuō)蹦锋,就是盡可能的通過(guò)抽象類型、接口或基類定義統(tǒng)一的數(shù)據(jù)類型欧芽,使得不同的子類可以通過(guò)繼承莉掂、實(shí)現(xiàn)共享并重用基類的代碼,并且在運(yùn)行時(shí)根據(jù)實(shí)際情況動(dòng)態(tài)選擇相應(yīng)的子類千扔、實(shí)現(xiàn)或?qū)ο笤髅睿赃_(dá)到靈活、可擴(kuò)展和高效的編程目的曲楚。
多態(tài)的作用在于:
- 簡(jiǎn)化程序的設(shè)計(jì)和維護(hù):通過(guò)基類或接口的抽象定義厘唾,將對(duì)象從具體實(shí)現(xiàn)解耦,易于擴(kuò)展和修改龙誊;
- 提高代碼的復(fù)用和可讀性:多個(gè)子類可以共享和重用父類的方法和屬性抚垃,避免了重復(fù)代碼的產(chǎn)生,同時(shí)也更方便于其他開發(fā)者理解和使用代碼趟大;
- 實(shí)現(xiàn)程序的松耦合和高內(nèi)聚:不同的對(duì)象之間通過(guò)統(tǒng)一的接口和基類保持松耦合的聯(lián)系鹤树,同時(shí)具備自己獨(dú)立的內(nèi)部實(shí)現(xiàn),即高內(nèi)聚性逊朽;
- 支持動(dòng)態(tài)綁定和運(yùn)行時(shí)多態(tài):程序可以根據(jù)實(shí)際情況動(dòng)態(tài)地選擇和調(diào)用對(duì)象的方法和屬性罕伯,提高了程序的靈活性和可擴(kuò)展性。
向上轉(zhuǎn)型和向下轉(zhuǎn)型
向上轉(zhuǎn)型:將子類對(duì)象轉(zhuǎn)換為父類類型叽讳,這樣就可以使用父類變量來(lái)代替子類變量追他。向上轉(zhuǎn)型是自動(dòng)的,也就是說(shuō)不需要強(qiáng)制類型轉(zhuǎn)換岛蚤,因?yàn)樽宇惱^承父類邑狸,子類對(duì)象可以直接賦值給父類變量。
較兩個(gè)對(duì)象是否相等灭美。默認(rèn)情況下推溃,equals()方法將比較兩個(gè)對(duì)象的引用地址是否相等,即是否為同一個(gè)對(duì)象。如果需要比較對(duì)象的值是否相等铁坎,則需要在子類中覆寫equals()方法蜂奸。在覆寫時(shí)需要注意,需要滿足自反性硬萍、對(duì)稱性扩所、傳遞性和一致性等特點(diǎn)。
- public int hashCode()
這個(gè)方法返回當(dāng)前對(duì)象的哈希碼朴乖,哈希碼是根據(jù)對(duì)象的內(nèi)部信息生成的一個(gè)整數(shù)祖屏,可以用于快速查找對(duì)象,比如在集合類中使用买羞。hashCode()方法的默認(rèn)實(shí)現(xiàn)會(huì)返回對(duì)象的內(nèi)存地址袁勺,但是可以在子類中重新定義。- public String toString()
這個(gè)方法返回表示該對(duì)象的字符串畜普,通常建議程序員重載這個(gè)方法期丰,以便打印對(duì)象的屬性或其他有用信息。- public final native Class<?> getClass()
這個(gè)方法返回對(duì)象所屬的類Class對(duì)象吃挑。由于Object是所有類的父類钝荡,因此在Java中每個(gè)對(duì)象都可以調(diào)用getClass()方法。這個(gè)方法是用本地代碼實(shí)現(xiàn)的舶衬。- public final void notify()
- public final void notifyAll()
這兩個(gè)方法是用于線程間通信的方法埠通,用于激活處于等待狀態(tài)下的線程。notify()方法隨機(jī)喚醒一個(gè)處于等待狀態(tài)的線程逛犹,而notifyAll()方法喚醒所有處于等待狀態(tài)的線程端辱,讓它們重新競(jìng)爭(zhēng)執(zhí)行權(quán)。
繼承條件下子類構(gòu)造方法的執(zhí)行過(guò)程
1虽画、在執(zhí)行子類構(gòu)造方法之前掠手,會(huì)隱式地調(diào)用父類的無(wú)參構(gòu)造方法,以保證父類的實(shí)例變量可以被正確初始化狸捕。如果父類沒有無(wú)參構(gòu)造方法喷鸽,并且在子類中沒有顯式調(diào)用父類的其他構(gòu)造方法,則編譯器會(huì)報(bào)錯(cuò)灸拍。
2做祝、執(zhí)行子類構(gòu)造方法,子類構(gòu)造方法可以調(diào)用子類自身的其他構(gòu)造方法或者父類的有參構(gòu)造方法鸡岗。
3混槐、如果子類構(gòu)造方法調(diào)用了子類自身的其他構(gòu)造方法,則該構(gòu)造方法必須是子類中定義的其它構(gòu)造方法的第一個(gè)語(yǔ)句轩性,否則編譯器會(huì)報(bào)錯(cuò)声登。4、如果子類構(gòu)造方法顯式地調(diào)用了父類的有參構(gòu)造方法,則需要使用關(guān)鍵字super顯式調(diào)用悯嗓,同時(shí)指定父類構(gòu)造方法所需要的參數(shù)件舵。調(diào)用父類構(gòu)造方法的語(yǔ)句也必須是子類構(gòu)造方法中的第一條語(yǔ)句。如果子類構(gòu)造方法中沒有顯式調(diào)用父類的構(gòu)造方法脯厨,則編譯器會(huì)隱式地調(diào)用父類的無(wú)參構(gòu)造方法铅祸。
4、子類構(gòu)造方法執(zhí)行完畢后合武,將返回一個(gè)新創(chuàng)建的子類對(duì)象临梗。
super關(guān)鍵字的作用和使用
調(diào)用父類的構(gòu)造方法:在子類構(gòu)造方法中,可以使用super關(guān)鍵字來(lái)調(diào)用父類構(gòu)造方法稼跳,以保證父類的實(shí)例變量能夠被正確初始化盟庞。使用super關(guān)鍵字調(diào)用父類構(gòu)造方法的語(yǔ)法super(參數(shù)列表)。
訪問(wèn)父類的成員變量:在子類中汤善,可以使用super關(guān)鍵字來(lái)引用父類中的成員變量茫经。這樣可以避免子類和父類擁有同名變量時(shí)的命名沖突問(wèn)題。使用super關(guān)鍵字訪問(wèn)父類成員變量的語(yǔ)法為super.父類成員變量名萎津。
調(diào)用父類的方法:在子類中,可以使用super關(guān)鍵字來(lái)調(diào)用父類中的方法抹镊。這樣可以避免子類和父類擁有同名方法時(shí)的命名沖突問(wèn)題锉屈。使用super關(guān)鍵字調(diào)用父類方法的語(yǔ)法為super.父類方法名(參數(shù)列表)。
super關(guān)鍵字必須出現(xiàn)在子類方法或構(gòu)造方法的第一條語(yǔ)句上垮耳。
==和equals()的聯(lián)系和區(qū)別
==比較的是兩個(gè)對(duì)象的引用地址是否相等颈渊,也就是判斷兩個(gè)對(duì)象是否為同一個(gè)實(shí)例。如果兩個(gè)對(duì)象的引用地址相等终佛,則==返回true俊嗽,否則返回false。
equals()比較的是兩個(gè)對(duì)象的內(nèi)容是否相等铃彰。如果兩個(gè)對(duì)象的屬性值相等绍豁,則equals()返回true,否則返回false牙捉。
多態(tài)的含義和作用
多態(tài)的含義是指同一種類型的對(duì)象竹揍,在不同的情況下會(huì)表現(xiàn)出不同的形態(tài)和行為特征。具體來(lái)說(shuō)邪铲,就是盡可能的通過(guò)抽象類型芬位、接口或基類定義統(tǒng)一的數(shù)據(jù)類型,使得不同的子類可以通過(guò)繼承带到、實(shí)現(xiàn)共享并重用基類的代碼昧碉,并且在運(yùn)行時(shí)根據(jù)實(shí)際情況動(dòng)態(tài)選擇相應(yīng)的子類、實(shí)現(xiàn)或?qū)ο螅赃_(dá)到靈活被饿、可擴(kuò)展和高效的編程目的四康。
多態(tài)的作用在于:
- 簡(jiǎn)化程序的設(shè)計(jì)和維護(hù):通過(guò)基類或接口的抽象定義,將對(duì)象從具體實(shí)現(xiàn)解耦锹漱,易于擴(kuò)展和修改箭养;
- 提高代碼的復(fù)用和可讀性:多個(gè)子類可以共享和重用父類的方法和屬性,避免了重復(fù)代碼的產(chǎn)生哥牍,同時(shí)也更方便于其他開發(fā)者理解和使用代碼毕泌;
- 實(shí)現(xiàn)程序的松耦合和高內(nèi)聚:不同的對(duì)象之間通過(guò)統(tǒng)一的接口和基類保持松耦合的聯(lián)系,同時(shí)具備自己獨(dú)立的內(nèi)部實(shí)現(xiàn)嗅辣,即高內(nèi)聚性撼泛;
- 支持動(dòng)態(tài)綁定和運(yùn)行時(shí)多態(tài):程序可以根據(jù)實(shí)際情況動(dòng)態(tài)地選擇和調(diào)用對(duì)象的方法和屬性,提高了程序的靈活性和可擴(kuò)展性澡谭。
向上轉(zhuǎn)型和向下轉(zhuǎn)型
向上轉(zhuǎn)型:將子類對(duì)象轉(zhuǎn)換為父類類型愿题,這樣就可以使用父類變量來(lái)代替子類變量。向上轉(zhuǎn)型是自動(dòng)的蛙奖,也就是說(shuō)不需要強(qiáng)制類型轉(zhuǎn)換潘酗,因?yàn)樽宇惱^承父類,子類對(duì)象可以直接賦值給父類變量雁仲。
向下轉(zhuǎn)型:將父類對(duì)象轉(zhuǎn)換為子類類型仔夺,這需要使用強(qiáng)制類型轉(zhuǎn)換,并且只有當(dāng)父類對(duì)象本身就是對(duì)應(yīng)的子類對(duì)象時(shí)才能成功轉(zhuǎn)換攒砖。