繼承就是子類別繼承父類別的特徵和行為,使得子類別物件(實例)具有父類別的實例域和方法,或子類別從父類別繼承方法,使得子類別具有父類別相同的行為。
透過繼承可以快速創建新的類,實現程式碼的重用,提高程式的可維護性,節省大量創建新類別的時間,提高開發效率和開發品質。
繼承性的好處:
減少程式碼的重複
提高程式碼重複使用性
#方便功能拓展
✅繼承性的格式:class A extends B{}
A:子類,派生類,subclass,B: 父類,超類,基類,superclass
體現:一旦子類A繼承父類B之後,子類A中就獲取了父類B中聲明的所有的屬性和方法,特別的,父類別中宣告為private的屬性或方法,子類別繼承父類別以後,仍然認為取得了父類別中私有的結構,只有因為封裝性的影響,使得子類別不能直接呼叫父類別的結構而已
子類別繼承父類別以後,還可以宣告自己特有的特有的屬性或方法:實作功能的拓展。而一個父類別是可以有多個子類別的,java中類別的單繼承性:一個類別只能有一個父類,子父類別是相對的概念,子類別直接繼承的父類,稱為:直接父類,間接繼承的父類稱為:間接父類,子類繼承父類以後,就獲取了直接父類以及所有間接父類中聲明的屬性和方法
如果我們沒有顯示的聲明一個類別的父類別的話,則此類繼承於java.lang.Object類,Object類別是所有java類別的根父類別
繼承中需要注意的點:
#1.子類別不能選擇性繼承父類別;
2.Java不支援多重繼承,但一個類別可以實作多個接口,從而克服單繼承的缺點;
3.建構方法不會被子類別繼承,但可以從子類別中呼叫父類別的建構方法。
例如
class teacher{ //声明一个teacher类为父类 String name; //定义父类的成员变量name、age int age; void show(){ //定义父类成员方法,将成员变量输出 System.out.println(name); System.out.println(age); } } class Student extends teacher { //声明一个Student类为子类并继承父类 } public class myfirst { public static void main(String[] args) { System.out.println("学生"); Student student=new Student(); //声明一个Student类的实例对象student student.name="Tom"; //子类调用父类的成员变量name并赋值 student.age=19; //子类调用父类的成员变量age并赋值 student.show(); //子类调用父类的成员方法show } }
在實際應用當中,我們所寫的子父類別的功能是不一樣的,這時我們就需要重寫或隱藏父類別的該方法。
1重寫:子類別繼承父類別以後,可以對父類別中同名同參數的方法,進行覆寫操作
2應用程式:重寫以後,當建立子類別物件以後,透過子類別物件呼叫子父類別中的同名同參數的方法時,實際執行的是子類別重寫父類別的方法
3重寫的規定:
#方法的宣告:
權限修飾符傳回值類型方法名稱(形參列表)
子類別中的叫重寫的方法,父類別中的叫被重寫的方法,子類別重寫的方法的方法名稱和形參列表與父類別被重寫的方法的方法名稱和形參列表相同,子類別重寫的方法的權限修飾符不小於父類別被重寫的方法的權限修飾符特殊情況:子類別不能重寫父類別中宣告為private權限的方法
關於傳回值類型:
父類別被重寫的方法的回傳值類型是void,則子類別重寫的方法的回傳值類型只能是void,父類別被重寫的方法的回傳值類型是A類型,則子類別重寫的方法的傳回值類型可以是A類別或A類別的子類別
父類別被重寫的方法的傳回值類型是基本資料型別(例如:double),則子類別重寫的方法的傳回值型別必須是相同的
子類別和父類別中的同名參數的方法都必須宣告為非static的才為重寫,為static的不是重寫
例如
class A{ public void sayHello() { //输出英文欢迎 System.out.println("Hello,Welcome to Java!!!"); } public void sayBye() { System.out.println("GoodBye,everyone"); } } class B extends A { public void sayHello() { //输出中文欢迎 System.out.println("大家好,欢迎学习Java!!!"); } } public class myfirst { public static void main(String[] args) { B b=new B(); //创建子类B的一个实例对象,使用默认构造方法 b.sayHello(); //调用子类中重写的方法 b.sayBye(); //调用父类中的方法 } }
super理解為:父類別的,super可以用來呼叫、屬性、方法、建構子
super的使用,我們可以在子類別的方法或建構器中。透過使用「super.屬性」或「super.方法」的方式,明確的呼叫父類別中宣告的屬性或方法,但是,通常情況下,我們習慣省略「super.
特殊情況:當子類別和父類別中定義了同名的屬性時,我們要想在子類別中呼叫父類別中聲明的屬性,則必須顯示的使用」super.屬性「的方式,表明呼叫的是父類別中聲明的屬性。當子類別重寫了父類別中的方法之後,我們想在子類別中的方法中呼叫父類別中被重寫的方法時,則必須明確的使用「super.方法」的方式,表明呼叫的是父類別中被重寫的方法。
我們可以在子類別的建構器中明確的使用“super(形參列表)”的方式,呼叫父類別中聲明的指定的建構器,"super(形參列表)"的使用,必須聲明在子類別建構器的首行,我們在類別的建構器中,針對於」this(形參列表)"或super(形參列表)“只能二選一,不能同時出現,在構造器的首行,沒有明確的聲明”this(形參列表)“或”super(形參列表) “,呼叫父類別中的建構器
例如
package first; class A{ public String name="张飞"; //添加成员变量 public void say() { //添加成员方法say System.out.println("我是父类A成员方法say"); } } class B extends A{ public String name="关羽"; //与父类中同名的字段,隐藏父类 public void say(){ //重写方法say super.say(); //使用super关键字调用父类中的方法 System.out.println("我是子类B成员方法say"); System.out.println("父类的name名字:"+super.name); //使用super关键字访问父类中的变量 } } public class myfirst { public static void main(String[] args) { B b=new B(); //创建子类的一个实例对象 b.say(); //调用子类中重写的方法 System.out.println("子类的name名字:"+b.name); //调用子类中的name } }
以上是Java的繼承:概念與用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!