繼承

image.png

使用繼承

編寫父類

class Pet { 
        //公共的屬性和方法
}

編寫子類

class Dog extends Pet { 
        //子類特有的屬性和方法
}
class Penguin extends Pet { 
}

main方法:
Dog dog = new Dog();
dog.name = "...";
sout(dog.name);
子類自動(dòng)繼承父類

子類訪問父類成員super
使用super關(guān)鍵字,super代表父類對(duì)象

訪問父類構(gòu)造方法
super(); (無參方法)
super(name);(有參方法)
--super調(diào)用構(gòu)造方法時(shí),只能是第一句
訪問父類屬性
super.name;
訪問父類方法
super.print();

不能被子類繼承的父類成員
private成員
構(gòu)造方法
protected
可以修飾屬性和方法
本類、同包、子類可以訪問

image.png

初始化順序

1.父類屬性
2.父類構(gòu)造方法
3.子類屬性
4.子類構(gòu)造方法

繼承下構(gòu)造方法的調(diào)用規(guī)則

在main方法里創(chuàng)造,調(diào)用子類方法,一定會(huì)先創(chuàng)造父類方法

  • 如果子類的構(gòu)造方法中沒有通過super顯式調(diào)用父類的有參構(gòu)造方法,也沒有通過this顯式調(diào)用自身的其他構(gòu)造方法,則系統(tǒng)會(huì)默認(rèn)先調(diào)用父類的無參構(gòu)造方法。在這種情況下,寫不寫“super();”語句,效果是一樣的。
  • 如果子類的構(gòu)造方法中通過super顯式調(diào)用父類的有參構(gòu)造方法,那將執(zhí)行父類相應(yīng)構(gòu)造方法,而不執(zhí)行父類無參構(gòu)造方法。
  • 如果子類的構(gòu)造方法中通過this顯式調(diào)用自身的其他構(gòu)造方法,在相應(yīng)構(gòu)造方法中應(yīng)用以上兩條規(guī)則。
  • 特別注意的是,如果存在多級(jí)繼承關(guān)系,在創(chuàng)建一個(gè)子類對(duì)象時(shí),以上規(guī)則會(huì)多次向更高一級(jí)父類應(yīng)用,一直到執(zhí)行頂級(jí)父類Object類的無參構(gòu)造方法為止。

方法重寫

方法重寫的規(guī)則

方法名相同
參數(shù)列表相同
返回值類型相同或者是其子類;
訪問權(quán)限不能嚴(yán)于父類: public, protected, private
子類會(huì)覆蓋父類
!構(gòu)造方法因?yàn)椴荒鼙焕^承,所以不能被重寫;

子類:
public String getinfo()
{
String str = super.getinfo();
return str + "我是一只" + kind;
}
@Override: 注解,重寫

抽象類

Pet pet = new Pet("...", 10, 20);
pet.print();
Pet沒有意義,只是作為父類存在,不能被實(shí)例化

public abstract class Pet {     
} 

abstract: 無法實(shí)例化
abstract也可以用于方法:抽象方法 (抽象方法里不能實(shí)現(xiàn):寫代碼)
只有抽象類能包含抽象方法
抽象方法:子類有自己的計(jì)算方法,父類不知道如何計(jì)算時(shí)用抽象方法,子類也必須實(shí)現(xiàn)父類的抽象方法
非抽象方法:父類能解決的方法

public abstract class Pet { 
       public void print() {
               //…
       }
}

每個(gè)子類的實(shí)現(xiàn)不同,抽象類中無法給出合理的print方法的實(shí)現(xiàn)

public abstract class Pet { 
       public abstract   void print() {
               //…
       }
}
public abstract double calculateArea();

final類

方法:不能被其他類繼承
final能被實(shí)現(xiàn)

public final class Penguin extends Pet { 
      //…
}

屬性:不能更改

public class Penguin {
       final String  home ="南極";// 居住地
       public void setHome(String name){
       this.home=home; //錯(cuò)誤,不可再賦值
    }
}

方法:不能重寫

public final void print () { 
      //…
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 為什么使用繼承 使用繼承 編寫父類 class Pet {//公共的屬性和方法} 編寫子類 class Dog e...
    蛋炒飯_By閱讀 747評(píng)論 0 0
  • 一.成員變量與局部變量的區(qū)別 成員變量:在類中定義,用來描述對(duì)象將要有什么(屬性)??杀槐绢惙椒ê推渌?dāng)前類有關(guān)...
    jeffierw閱讀 631評(píng)論 0 0
  • 配套視頻教程 本文B站配套視頻教程[https://www.bilibili.com/video/BV1fp4y1...
    __豆約翰__閱讀 711評(píng)論 0 5
  • 5繼承 5.1 類、超類和子類 重用部分代碼,并保留所有域?!癷s-a”關(guān)系,用extends表示。 已存在的類被...
    我快要上天啦閱讀 952評(píng)論 1 3
  • 這幾天看到網(wǎng)上熱抄:“裸條”新聞。說當(dāng)今大學(xué)校院盛行女大學(xué)生用“裸照”做抵押,借周息高達(dá)百分之三十的高利貸,過...
    f185e958dc7c閱讀 231評(píng)論 0 0

友情鏈接更多精彩內(nèi)容