面向对象三大特征之继承(extends)——Java笔记(六)
生活随笔
收集整理的這篇文章主要介紹了
面向对象三大特征之继承(extends)——Java笔记(六)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
繼承: 從一般到特殊的關(guān)系,是一種拓展關(guān)系,子類對(duì)象是父類的一種,也可稱為”is a“的關(guān)系 泛化: 把子類里的共性抽取到父類里的來(lái)的過(guò)程 特化: 子類在父類的基礎(chǔ)上上定義了自己特有的行為特征的過(guò)程 格式: 修飾符 class SubClass extends SuperClass{ } SubClass?:導(dǎo)出類、繼承類、子類 SuperClass:父類、基類、超類、源類 子類SubClass通過(guò)extends來(lái)繼承父類SuperClass 繼承是通過(guò)extends來(lái)實(shí)現(xiàn)的 繼承提高了代碼的復(fù)用性,提高了軟件的開發(fā)效率 ? 讓類與類之間產(chǎn)生關(guān)系,這個(gè)是實(shí)現(xiàn)多態(tài)的前提? 子類對(duì)象訪問(wèn)實(shí)例成員的時(shí)候,是現(xiàn)在子類里找,要是找不到再去父類找 每個(gè)類有且只有一個(gè)直接父類 一個(gè)類沒有顯示的繼承其他的一個(gè)類時(shí)候,默認(rèn)的直接父類就是object類 一旦一個(gè)類顯示的繼承了其他的一個(gè)類的時(shí)候,此時(shí)默認(rèn)的直接父類object就會(huì)被取消 Java只支持單繼承不支持多繼承 父類里面私有的東西,子類不能繼承 在繼承操作中,對(duì)于子類的對(duì)象實(shí)例化,子類對(duì)象在實(shí)例化之前必須首先調(diào)用父類中的構(gòu)造方法之后在調(diào)用自身的構(gòu)造方法子 證明: 1 class Super{
2 public Super(){
3 System.out.println("我是父類super");
4 }
5 }
6 class Sub extends Super{
7 public Sub(){
8 System.out.println("我是子類sub");
9 }
10 }
11 public class InstanceDemo {
12 public static void main(String[] args) {
13 new Sub();
14 /**
15 * 我是父類super
16 * 我是子類sub
17 *
18 * 先打印的是父類里面的在打印的子類里面
19 * 從這個(gè)可以看出是先調(diào)用父類的構(gòu)造方法創(chuàng)建父類對(duì)象再來(lái)調(diào)用子類里面的構(gòu)造方法
20 *
21 */
22 }
23 } 子類對(duì)象在初始化之前會(huì)默認(rèn)調(diào)用父類無(wú)參的構(gòu)造方法,但是一旦子類顯示的調(diào)用了父類其他的構(gòu)造方法,那么默認(rèn)調(diào)用的構(gòu)造方法將會(huì)被取消 方法的重寫(Override): 當(dāng)父類的某個(gè)方法不適合于子類本身的特征行為時(shí)就當(dāng)重寫父類中應(yīng)當(dāng)改變的方法 方法重寫應(yīng)遵循的原則: 方法簽名(方法名+參數(shù)列表)必須相同 子類方法的返回值類型比父類方法的返回值類型更小或相等 子類方法聲明拋出的異常應(yīng)比父類方法申明跑出異常更小或相等,即子類方法不能拋出新的異常類型,子類方法可以同時(shí)聲明拋出多個(gè)父類方法聲明拋出異常的子類(RuntimeException例外) 子類方法的訪問(wèn)權(quán)限應(yīng)比父類方法更大或相等 overload 與 override
構(gòu)造方法不能被重寫 super關(guān)鍵字 表示父類對(duì)象的默認(rèn)引用 如果子類要調(diào)用父類被覆蓋的實(shí)例方法,可用super作為調(diào)用者調(diào)用父類被覆蓋的實(shí)例方法 使用super調(diào)用父類方法 使用super調(diào)用父類的構(gòu)造方法 對(duì)super的調(diào)用必須是構(gòu)造器中的第一個(gè)語(yǔ)句 this不能出現(xiàn)在static修飾的方法中,super也一樣不能出現(xiàn)在static修飾的方法中 因?yàn)閟tatic修飾的方法屬于類,即調(diào)用者是類 ?? this與super ? ??
ps:使用super()和this()在同一個(gè)構(gòu)造方法中是不可能同時(shí)顯示出現(xiàn)的
?
| 區(qū)別點(diǎn) | 重載(overload) | 重寫(override) | |
| 1 ? ? ? ? ?? | 判斷規(guī)則 ? ?? | 參數(shù)列表順序不同、類型不同、個(gè)數(shù)不同都可以構(gòu)成重載 ? ??同類中方法名相同,但是方法的參數(shù)列表不同,與方法的返回值類型和修飾符無(wú)關(guān) | ? 方法簽名(方法名+參數(shù)列表)必須相同 ? ? 子類方法的返回值類型比父類方法的返回值類型更小或相等 ? ? 子類方法聲明拋出的異常應(yīng)比父類方法申明跑出異常更小或相等 ? ? 子類方法的訪問(wèn)權(quán)限應(yīng)比父類方法更大或相等 |
| 2 | 權(quán)限 | 無(wú)權(quán)限要求 | 被重寫的方法不能擁有比父類更嚴(yán)格的權(quán)限 |
| 3 | 范圍 | 發(fā)生在一個(gè)類中 | 發(fā)生在繼承關(guān)系中 |
| 4 | 多態(tài) | 編譯時(shí)多態(tài) | 運(yùn)行時(shí)多態(tài) |
| ? | 區(qū) ? ?別 ? ? ? ? ? ? ?? | this | super |
| 1 ? ? ? ? ? | 使 ? 用 | 調(diào)用本類中的字段或方法 | 從子類調(diào)用調(diào)用父類的字段或方法 |
| 2 | 構(gòu) ? 造 | 可以調(diào)用本類中的構(gòu)造方法,且有一個(gè)構(gòu)造方法要作為出口 | 從子類調(diào)用父類的構(gòu)造方法,不管子類如何安排最終一定會(huì)去調(diào)用,默認(rèn)調(diào)用的父類中無(wú)參的構(gòu)造方法 |
| 3 | 要 ? 求 | 調(diào)用自身構(gòu)造方法時(shí)放在構(gòu)造方法首行 | 調(diào)用父類構(gòu)造方法時(shí)放在子類構(gòu)造方法首行 |
| 4 | 特 ? 殊 | 表示當(dāng)前對(duì)象 | 表示父類對(duì)象 |
?
轉(zhuǎn)載于:https://www.cnblogs.com/Essence/p/3967426.html
總結(jié)
以上是生活随笔為你收集整理的面向对象三大特征之继承(extends)——Java笔记(六)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 字符型变量/常量
- 下一篇: JavaSE | 多线程