面向物件三大特性:封裝,繼承,多型
阿新 • • 發佈:2020-12-10
面向物件三大特性
封裝
-
該露的露,該藏的藏
- 我們程式設計要追求“高內聚,低耦合”。高內聚:類的內部資料操作細節自己完成,不允許外部干涉;低耦合:僅暴露少量的方法給外部使用。
-
封裝(資料的隱藏)
- 通常,應禁止直接訪問一個物件中資料的實際表示,而應通過操作介面來訪問,這稱為資訊隱藏。
-
記住這句話就夠了:屬性私有: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()~~//資料(方法)丟失
-
父類引用指向子類的物件
-
把子類轉換為父類,向上轉型
-
把父類轉換為子類,向下轉型,強制轉換
-
方便方法的呼叫,減少重複的程式碼!簡潔
-
-