Java三大特性
Java三大特性
封裝
封裝是指把一個物件的狀態資訊(也就是屬性)隱藏在物件內部,不允許外部物件直接訪問物件的內部資訊。但是可以提供一些可以被外界訪問的方法來操作屬性。如果屬性不想被外界訪問,我們大可不必提供方法給外界訪問。但是如果一個類沒有提供給外界訪問的方法,那麼這個類也沒有什麼意義了。
繼承
**概念:**繼承就是子類繼承父類的特徵和行為,使得子類物件(例項)具有父類的例項域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。
不同型別的物件,相互之間經常有一定數量的共同點。例如,小明同學、小紅同學、小李同學,都共享學生的特性(班級、學號等)。同時,每一個物件還定義了額外的特性使得他們與眾不同。例如小明的數學比較好,小紅的性格惹人喜愛;小李的力氣比較大。繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的資料或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。通過使用繼承,可以快速地建立新的類,可以提高程式碼的重用,程式的可維護性,節省大量建立新類的時間 ,提高我們的開發效率。
繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的資料或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。通過使用繼承可以提高程式碼複用性。繼承是多型的前提。
關於繼承如下 3 點請記住:
- 子類擁有父類物件所有的屬性和方法(包括私有屬性和私有方法),但是父類中的私有屬性和方法子類是無法訪問,只是擁有。
- 子類可以擁有自己屬性和方法,即子類可以對父類進行擴充套件。
- 子類可以用自己的方式實現父類的方法。
分類:
根據繼承的特性可以分為純繼承與擴充套件。
純繼承關係是純粹的“is-a”(是一種)關係,因為一個類的介面已經確定了它應該是什麼。繼承可以確保所有的匯出類具有基類的介面,且絕對不會少。基類可以接收傳送給匯出類的任何訊息,因為二者有著完全相同的介面。
擴充套件關係“is-like-a”(像一個)關係,匯出類就像是一個基類——它有著相同基類的基本介面,但是它還具有由額外方法實現的其他特性。匯出類中介面擴充套件部分不能被基類訪問,因此,一旦向上轉型,就不能呼叫那些新方法。
A extends B , B a =new A(); B向上轉型為A 的物件
A a1 =(A) a; 向下轉型(要先向上轉型),此時,a1可以呼叫擴充套件方法
特性:
Java 語言的繼承是單繼承,不允許一個類繼承多個父類。
繼承最重要的方面是用來表現新類和基類之間的關係。這種關係可以用“新類是現有類的一種型別”。
-
繼承可以把新類向上轉換成基類,這是向上轉型的一種表現。
-
由匯出類轉型成基類,在繼承圖上是向上移動的。
-
向上轉型是從一個較專用型別向較通用型別轉換。
-
匯出類是基類的一個超集。它可能比基類含有更多的方法,但它必須至少具備基類中所有的方法。
優缺點:
在面嚮物件語言中,繼承是必不可少的、非常優秀的語言機制,它有如下優點:
- 程式碼共享,減少建立類的工作量,每個子類都擁有父類的方法和屬性;
- 提高程式碼的重用性;
- 子類可以形似父類,但又異於父類;
- 提高程式碼的可擴充套件性,實現父類的方法就可以“為所欲為”了。
- 提高產品或專案的開放性。
自然界的所有事物都是優點和缺點並存的,繼承的缺點如下:
- 繼承是侵入性的。只要繼承,就必須擁有父類的所有屬性和方法;
- 降低程式碼的靈活性。子類必須擁有父類的屬性和方法,讓子類自由的世界中多了些約束;
- 增強了耦合性。當父類的常量、變數和方法被修改時,需要考慮子類的修改,而且在缺乏規範的環境下,這種修改可能帶來非常糟糕的結果——大段的程式碼需要重構。
多型
多型,顧名思義,表示一個物件具有多種的狀態。具體表現為父類的引用指向子類的例項。
**定義格式:**父類型別 變數名=new 子類型別();
理解:
多型是同一個行為具有多個不同表現形式或形態的能力。
多型就是同一個介面,使用不同的例項而執行不同操作。
多型的前提:
1)要有繼承關係或實現關係(介面);
2)要有方法重寫;
3)要有父類或者父介面引用指向子類`Fu f= new Zi();
注意:形參實參形式的(形參父類實參子類)。
成員特點:
1、成員變數(編譯執行全看父類)
編譯的時候,參考父類中有沒有這個變數,如果有,編譯成功,沒有編譯失敗
執行的時候,執行的是父類中的變數值
2、成員方法(編譯看父類,執行看子類)
編譯的時候, 參考父類中有沒有這個方法,如果有,編譯成功,沒有編譯失敗
執行的時候, 執行的是子類的重寫方法
特例:呼叫靜態成員方法時,執行看父類。原因:靜態屬於類,不屬於物件。不new物件,也可呼叫父類的靜態方法,直接用類名呼叫。
多型的特點:
- 物件型別和引用型別之間具有繼承(類)/實現(介面)的關係;
- 引用型別變數發出的方法呼叫的到底是哪個類中的方法,必須在程式執行期間才能確定;
- 多型不能呼叫“只在子類存在但在父類不存在”的方法;
- 如果子類重寫了父類的方法,真正執行的是子類覆蓋的方法,如果子類沒有覆蓋父類的方法,執行的是父類的方法。
多型的型別:
如果在編譯時能夠確定執行多型方法稱為編譯時多型,否則稱為執行時多型。
編譯時多型
方法過載都是編譯時多型—對於多個同名方法,如果在編譯時能夠確定執行同名方法中的哪一個,則稱為編譯時多型性.。
執行時多型
如果在編譯時不能確定,只能在執行時才能確定執行多個同名方法中的哪一個,則稱為執行時多型性
Person p = new Man();
p.toString();
Java支援執行時多型,意為p.toString()實際執行p所引用例項的toString(),究竟執行Person類還是Man類的方法,執行時再確定。如果Man類宣告瞭toString()方法,則執行之;否則執行Person類的toString()方法。
多型的好處:
- 可替換性(substitutability)。多型對已存在程式碼具有可替換性。
- 可擴充性(extensibility)。多型對程式碼具有可擴充性。增加新的子類不影響已存在類的多型性、繼承性,以及其他特性的執行和操作。實際上新加子類更容易獲得多型功能。
- 介面性(interface-ability)。多型是超類通過方法簽名,向子類提供了一個共同介面,由子類來完善或者覆蓋它而實現的。
- 靈活性(flexibility)。它在應用中體現了靈活多樣的操作,提高了使用效率。
- 簡化性(simplicity)。多型簡化對應用軟體的程式碼編寫和修改過程,尤其在處理大量物件的運算和操作時,這個特點尤為突出和重要。
instanceof關鍵字
作用:用來判斷某個物件是否屬於某種資料型別。
-
注意: 返回型別為布林型別
使用案例:
Fu f1=new Zi();
Fu f2=new Son();
if(f1 instanceof Zi){
System.out.println("f1是Zi的型別");
}
else{
System.out.println("f1是Son的型別");
}
相關文章
- JAVA的特性Java
- Java 9特性Java
- Java 11新特性Java
- Java 17新特性Java
- java多型特性Java多型
- Java 8 新特性Java
- Java 8 新特性Java
- Java 8新特性Java
- Java新特性--Java Web Start (轉)JavaWeb
- JAVA 1.8 新特性 StreamJava
- JAVA 1.8 新特性 LamdbaJava
- JAVA8新特性Java
- Java8 新特性Java
- Java SE 21 新增特性Java
- Java SE 20 新增特性Java
- java的三大特性Java
- Java19新特性Java
- java 8 特性——stream流Java
- java分散式(類特性)Java分散式
- JAVA特性 之 反射(Reflection)Java反射
- Java SE 22 新增特性Java
- Java 8 新特性 StreamJava
- Java SE 23 新增特性Java
- 【Java】Java新特性--Records記錄型別Java型別
- Java8新特性 - LambdaJava
- Java8的新特性Java
- Java高階特性之集合Java
- Java高階特性—泛型Java泛型
- Java12的新特性Java
- java三大特性-封裝Java封裝
- Java 16 新特性:record類Java
- Java 15 新特性:文字塊Java
- java-jdk7新特性JavaJDK
- Java 11 的新特性(下)Java
- JAVA8新特性用法Java
- Java 8 新特性---Optional類Java
- java併發特性及其周邊Java
- Java21的新特性Java