JAVA 面向对象-2-继承(Inheritance)
i.繼承(Inheritance)
1.繼承的概念
繼承:在面向對象編程的過程中,通過擴展一個已有的類,并繼承該類的屬性和行為,來創建一個新的類。
繼承是面向對象編程最重要的特征之一。
繼承的優點:
1). 避免大量的重復代碼。?
2). 繼承是功能的拓展,使得結構清晰。 更容易維護和修改。
父類:之前已有的類,也可以稱基類、超類(superClass)
子類:新生的類,也可以叫派生類。
1.子類會繼承父類的一切(不包括private修飾的私有類)方法和屬性。
2.Java中只能單繼承,通過extends進行繼承。
測試設計:一個對象有(has a)一個屬性,一個對象執行(does)一個行為。
2.使用“is a”關系判斷繼承
當使用繼承時,如果說,子類“is a(是一個)”父類,成立。那么繼承關系就是對的。
3.類的繼承(extends)
?"3W" , "1H":
What:在java中對父類方法和屬性的繼承 —— 功能拓展
Where:出現大量重復代碼的時候
Why:避免大量重復代碼,使代碼結構清晰,更容易維護和修改。
How:?使用關鍵字extends繼承父類。
1)父類(基類/superClass):為子類提供可繼承的屬性和方法。
代碼示例:
public class Pet {String name;int age;String color;public Pet(){System.out.println(處在構造函數中);}/**帶入參數的形式: * public Pet(String name){ * System.out.println(name); * }
*/public void show() { } }
2)子類:子類會繼承父類的一切(不包括private修飾的私有類)方法和屬性。
代碼示例:
public class Cat extends Pet{public Cat(){super(); // --------------------- 調用父類的無參構造函數//或者 super(name); ------------ 調用父類的有參構造函數System.out.println("喵喵要吃魚");}@Overridepublic void show(){System.out.println(name+","+age);System.out.println("喵喵喵");} }1.Java中只能單繼承,通過extends進行繼承。 ??
2.如果父類有參數,子類也必須有參數,并返回給父類。否則無法程序執行
3.this();與super();?是沖突的,它們都必須放在第一行才能生效。
4.單繼承與多繼承
某些OOP語言,如C++,允許多個繼承。
但是Java中只能允許單繼承,通過extends進行繼承。
所以,每個Java類只有一個父類。
5.所有類的根類
java語言API中有一個特殊類Object,是整個Java類層次中的根類。
Object類是每一個Java類的父類(直接父類或者間接父類)。所以,不管什么類類型,Object中的方法都可以被任何對象調用。
6.方法的重載與重寫
1)重載:只與參數的個數和類型有關。構造函數也能重載
代碼示例:
public void show(int a){System.out.println(a); } public void show(int a,int b){System.out.println(a+b); } public void show(int a,double b){System.out.println(a+b); }重載可以針對同種行為的不同情況,方便處理。
2)重寫:子類可以重寫從父類繼承的方法,從而允許子類添加或者改變父類中方法的行為,是OOP特征之一。?
◇規則:
a. 子類的方法的返回值類型、方法名和形式參數列表,必須和父類相同。
b. 訪問修飾符必須不小于父類的訪問修飾符。
c. 子類中重寫的異常不能拋出比父類更多的異常。
1.重寫的方法名字和參數必須一模一樣。一定發生在父類和子類之間。?
2.當父類的方法不適合子類時,就需要重寫。
7.super關鍵字
1)this引用:每個對象都有一個對自身的引用,this引用。
2)super引用:一個類則可以使用super關鍵字顯式引用從父類繼承的成員變量和方法。同時如果有參數,會將參數傳遞給父類。
1.在子類重寫父類方法的時候,如果需要調用父類的方法,就需要使用super關鍵字。?
2.this和super關鍵字都必須寫在代碼第一行,所以只能選擇一個。
8.final關鍵字
1)final常量:不能修改其中的值。
2)final類:一個類可以聲明為最終類。最終類不能被其他類繼承。
public final class Dog extends Pet{}3)final方法:一個方法可以聲明為最終方法。最終方法不能被重寫。
public class Pet{String name;int age;public final void show(){}System.out.println(name+“, ”+age); }9.實例化的過程
當一個對象被實例化時:
1)new運算符調用子類的構造器
2)子類會用this關鍵字調用子類的其他構造器。最后,子類中的第一行代碼中不是this()的構造器將被調用。?
3) 在子類的構造器中的任何語句執行前,父類的構造器必須用super關鍵字調用。如果沒用顯式使用super調用,編譯器會用super()調用無參數的父類構造器。?
4)如果父類也是另一類的子類,那么在父類的構造器中的任何語句執行前,父類構造器必須使用super調用更高一層父類的構造器。?
5)本過程繼續執行,直到到達類層次樹的頂部,即Object類。
6)Object類中的構造器執行,然后控制流程轉到繼承層次樹中Object下面的類的構造器中。
7)構造器沿著繼承層次樹向下執行,最后一個要執行的構造器,實際上是第一步中先調用的那個構造器。
?
在每個構造器中,如果要調用super()或this(),那么調用代碼必須是構造器的第一行代碼
轉載于:https://www.cnblogs.com/hyqs1314520/p/6262715.html
總結
以上是生活随笔為你收集整理的JAVA 面向对象-2-继承(Inheritance)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP S/4HANA客户关系管理之变
- 下一篇: Node.js 初识 fs 模块