面向對象三大特性:封裝,繼承,多態
面向對象三大特性
封裝
-
該露的露,該藏的藏
- 我們程式設計要追求「高內聚,低耦合」。高內聚:類的內部數據操作細節自己完成,不允許外部干涉;低耦合:僅暴露少量的方法給外部使用。
-
封裝(數據的隱藏)
- 通常,應禁止直接訪問一個對象中數據的實際表示,而應通過操作介面來訪問,這稱為資訊隱藏。
-
記住這句話就夠了:屬性私有:get/set
繼承
-
繼承的本質是對某一批類的抽象,從而實現對現實世界更好的建模
-
extends的意思是「擴展」。子類是父類的擴展。
-
Java中類只有單繼承,沒有多繼承!
-
關係 學生是人,學生繼承人 學生類是子類/派生類
-
繼承是類與類之間的一種關係。除此之外,類和類之間的關係還有依賴,組合,聚合等
-
public protected default private 一般來講 只有屬性才會是private ctrl + H :顯示繼承關係
-
Java中所有的類 都默認直接或者間接繼承Object
-
super關鍵字:父類
- 和this相對
- 但父類私有的東西無法被繼承
- 注意點:
- 1.super調用父類的構造方法,必須在構造方法的第一個
- 2.super必須只能出現在子類的方法或者構造方法中
- 3.super和this不能同時調用構造方法
- this()本類構造 super()調用父類構造
-
子類默認調用父類無參構造
-
方法重寫:重點 ——>多態
-
重寫是方法的重寫,和屬性無關
-
//靜態方法和非靜態的方法區別很大 //靜態方法的調用只和左邊,定義的數據類型有關 //重寫只能是非靜態方法 IDEA會有個相應的標 A a=new A(); a.test();//A //父類的引用指向了子類 B b=new A(); b.test();//B
-
重寫:需要有繼承關係,子類重寫父類的方法
- 1.方法名必須相同
- 2.參數列表必須相同
- 3.修飾符:範圍可以擴大 public>protected>default>private
- 4.拋出異常:範圍可以被縮小,但不能被擴大;ClassNotFoundException–>Exception(大)
-
為什麼需要重寫
- 父類實現的功能子類不一定需要或者不一定滿足
-
快捷鍵:Alt+Insert 選中override
-
多態
-
即同一方法可以根據發送對象的不同而採用多種不同的動作
-
一個對象的實際類型是確定的,但可以指向對象的引用的類型有很多
-
new Student(); new Person();
-
//可以指向的引用類型就不確定了,父類的引用指向子類 //對象能執行哪些方法,主要看對象左邊的類型,和右邊關係不大! //Student能調用的方法都是自己的或者繼承父類的 Student s1=new Student(); //Person父類型 可以指向子類,但是不可以調用子類獨有的方法 Person s2=new Student(); Object s3=new Student(); //對象能執行哪些方法 主要看對象左邊的類型 和右邊關係不大 s2.eat();//子類重寫了父類的方法,執行了子類的方法 s1.eat(); 總結:根據左邊類型進行調用 但是如果子類重寫了 會調用子類的
-
-
多態注意事項:
- 1.多態是方法的多態,屬性沒有多態
- 2.父類和子類,必須有聯繫,否則類型轉換異常!ClassCastException!
- 3.存在條件:繼承關係+方法需要重寫+父類的引用指向子類對象!
- Father f1=new Son();
- 注意:
- 1.static 方法:屬於類,它不屬於實例 不能被重寫
- 2.final 常量:不再被重寫
- 3.private 方法:私有的不能被重寫
-
instanceof (類型轉換)引用類型
- X instanceof Y
- 編譯能不能通過 取決於X與Y是否存在父子關係
- 最後結果對錯 取決於X指向的實際類型是不是Y的子類型
- X instanceof Y
-
類型之間的轉換
-
基本數據類型 低轉高 強制轉換
-
引用類型
-
Person person=new Student() //student將這個對象轉換為Student類型 我們就可以使用Student類型的方法了 Student student=(Student)person; student.go(); Student student=new Student(); student.go(); Person person =student;//隱式低轉高 ~~person.go()~~//數據(方法)丟失
-
父類引用指向子類的對象
-
把子類轉換為父類,向上轉型
-
把父類轉換為子類,向下轉型,強制轉換
-
方便方法的調用,減少重複的程式碼!簡潔
-
-