Java 繼承、super() 關(guān)鍵字使用、super 和 this的區(qū)別
1. 繼承
繼承是子類使用 extends 關(guān)鍵字來繼承父類獲取相同的屬性和方法,可以解決代碼的復(fù)用性問題
繼承的基本思想:父類的構(gòu)造器進(jìn)行父類初始化,子類的構(gòu)造器進(jìn)行子類的初始化
繼承使用細(xì)節(jié):
子類在使用父類的方法或?qū)傩詴r(shí),不能直接訪問使用 private 私有修飾符修飾的屬性或方法,可以通過公共的方法來間接獲取
子類的無參構(gòu)造器會(huì)默認(rèn)調(diào)用 super() 方法來調(diào)用父類的無參構(gòu)造器,若父類沒有無參構(gòu)造器,子類需要手動(dòng)調(diào)用父類的其他構(gòu)造器
子類在使用 super() 或 this() 使用父類或本類的構(gòu)造器,則需要放到構(gòu)造器的第一行,并且 super() 和 this() 只能有一個(gè),super() 默認(rèn)在每個(gè)子類的構(gòu)造器都會(huì)生成,不管寫沒寫,系統(tǒng)自動(dòng)會(huì)調(diào)用 super() 方法
Object 是所有類的父類,父類的調(diào)用不局限直接父類,將一直追溯到 最頂級(jí)的 Object 類
子類最多只能繼承一個(gè)父類,如果想要多繼承的話,則需要間接繼承,即繼承父類,父類繼承其父類
繼承必須滿足 is-a 的邏輯關(guān)系,不能濫用繼承
子類繼承后使用屬性的時(shí)候?qū)哟芜f增,先尋本類是否有此屬性,若沒有則向父類依次往后尋找,若期間碰到了私有屬性則不能繼續(xù)訪問其他屬性,如果需要訪問私有屬性,只能讓此類提供公共方法讓子類調(diào)用方法來訪問
2. super 關(guān)鍵字
super 可以理解為對(duì)父類的引用,通過 "." 來獲取父類的非私有的屬性或方法
super 可以訪問父類的構(gòu)造器
子類繼承父類需要調(diào)用父類方法時(shí),當(dāng)方法名都相同時(shí),通過 super. 語法可以直接調(diào)用,這和直接或用this調(diào)用方法不同,后者當(dāng)中這兩個(gè)方式可以等價(jià)為一個(gè)方式,因?yàn)?this 和直接調(diào)用都是在本類當(dāng)中開始尋找,之后依次遞增到父類當(dāng)中調(diào)用方法。如果方法名都不重名,則這 3 種方式都可以調(diào)用
super 不僅僅訪問直接父類,若父類的上面還有相同的方法名則就近選擇,繼承的本質(zhì)就是建立查找關(guān)系。
3. this 與 super 的區(qū)別
this 在調(diào)用方法或使用屬性的時(shí)候都默認(rèn)先從本類當(dāng)中尋找是否存在,若不存在則從父級(jí)開始就近尋找。而 super 在調(diào)用方法或使用屬性的時(shí)候直接從其父類開始尋找
this 在創(chuàng)建構(gòu)造器當(dāng)中使用時(shí),必須調(diào)用本類的構(gòu)造器。而 super 則調(diào)用父類構(gòu)造器,這兩種方式都需要放在構(gòu)造器的第一行且只能有一個(gè)。
在一些特殊的含義時(shí)候,this 還可以認(rèn)為是本類的對(duì)象,而 super 則是子類對(duì)父類訪問的對(duì)象。
文章來源地址http://www.zghlxwxcb.cn/news/detail-556071.html
文章來源:http://www.zghlxwxcb.cn/news/detail-556071.html
到了這里,關(guān)于Java 繼承、super() 關(guān)鍵字使用、super 和 this的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!