面向?qū)ο?繼承(1)

繼承

繼承:
多個類有共同的成員變量和成員方法,抽取到另外一個類中(父類),在讓多個類去繼承這個父類,我們的多個類就可以獲取到父類中的成員了。

extends關(guān)鍵字

格式:
class 子類 extends 父類 {}

public class ExtendsDemo {
    public static void main(String[] args) {
        DotA1 d = new DotA1();
        d.start();
        
        LOL1 l = new LOL1();
        l.start();
    }
}

class Game1 {
    String name;
    double version;//版本號
    String agent;//代理商
    
    public void start() {
        System.out.println("游戲啟動了");
    }
    
    public void stop() {
        System.out.println("游戲關(guān)閉了");
    }
}

class DotA1 extends Game1 {

}

class LOL1 extends Game1 {
    
}

繼承的特點

1、在Java中,類只支持單繼承,不允許多繼承,也就是說一個類只能有一個直接父類
2.多個類可以繼承一個父類,例如下面這種情況是允許的。

     class A{}
     class B extends A{}
     class C extends A{}   

3、在Java中,多層繼承是可以的,即一個類的父類可以再去繼承另外的父類,例如C類繼承自B類,而B類又可以去繼承A類,這時,C類也可稱作A類的子類。下面這種情況是允許的。

     class A{}
     class B extends A{}   // 類B繼承類A,類B是類A的子類
     class C extends B{}   // 類C繼承類B,類C是類B的子類,同時也是類A的子類

一個父類可以有多個子類,但一個子類只有一個父類

    public static void main(String[] args) {
        CSGO C = new CSGO();
        l.update();
        l.start();
    }
}

class Game {
    public void start() {
        System.out.println("游戲啟動了");
    }
}

class PCGame extends Game {
    public void update() {
        System.out.println("PCGame更新了");
    }
}

class MobileGame extends Game {
    public void update() {
        System.out.println("MobileGame更新了");
    }
}

class CSGO extends PCGame {
    
}

繼承中成員變量的特點

A:子類只能獲取父類非私有成員
子父類中成員變量的名字不一樣直接獲取父類的成員變量
子父類中成員變量名字是一樣的獲取的是子類的成員變量

B:就近原則:誰離我近我 就用誰
如果有局部變量就使用局部變量
如果沒有局部變量,有子類的成員變量就使用子類的成員變量
如果沒有局部變量和子類的成員變量,有父類的成員變量就使用父類的成員變量
C: super:可以獲取父類的成員變量和成員方法,用法和this是相似的

public static void main(String[] args) {
        Kid3 k = new Kid3();
        k.show();
    }
}

class Dad3 {
    String name = "建霖";
}

class Kid3 extends Dad3 {
    String name = "四蔥";
    
    public void show() {
        String name = "五蔥";
        
        System.out.println(super.name);
        System.out.println(this.name);
        System.out.println(name);
    }

繼承中成員方法的特點和方法重寫

A:子類中沒有這個方法,調(diào)用父類的
B: 子類中重寫了這個方法,調(diào)用子類的
a:方法的重寫:在子父類當中,子類的方法和父類的完全一樣,子類重寫了父類的方法(覆蓋),當子類重寫了父類的方法之后,使用子類對象調(diào)用的就是子類的方法

b:方法的重載:在一個類中,有多個重名的方法,但是其參數(shù)不一樣(參數(shù)的個數(shù),參數(shù)的類型,參數(shù)的順序),和返回值無關(guān)

    public static void main(String[] args) {
        Kid4 k = new Kid4();
        k.eat();
    }
}

class Dad4 {
    public void eat() {
        System.out.println("小酌兩口");
        System.out.println("去睡覺了");
    }
}

class Kid4 extends Dad4 {
    public void eat() {//無重載情況繼續(xù)調(diào)用父類方法
        System.out.println("好好吃飯");
    }

方法重寫的應(yīng)用場景和注意事項

方法重寫的應(yīng)用場景:當父類的方法不能完全滿足子類使用的時候,既可以保留父類的功能(沿襲、傳承),還可以有自己特有的功能

方法重寫的注意事項:
不可以重寫父類私有的成員方法,壓根就看不到父類的私有成員

子類重寫父類方法,權(quán)限必須大于等于父類方法的權(quán)限

注解

@Override:方法重寫,說明下面的方法是重寫父類的方法

public static void main(String[] args) {
        NewPhone np = new NewPhone();
        np.call();
    }
}

class Phone {
    void call() {
        System.out.println("打電話");
    }
}

class NewPhone extends Phone {
    
    @Override
    public void call() {
        System.out.println("錄音");
        //System.out.println("打電話");
        
        //super.call();//調(diào)用父類的方法
    }

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

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

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