App下載

Java面向?qū)ο笕筇匦灾^承

猿友 2021-07-19 11:17:41 瀏覽數(shù) (2356)
反饋

當多個對象具備多種同樣的屬性和方法,每個人對象都要重復(fù)寫同樣的內(nèi)容,則會顯得代碼冗雜和繁重。作為面向?qū)ο笕筇匦灾坏睦^承,則可以很好地解決該問題。本篇文章將為您簡單地介紹繼承的內(nèi)容以及在 Java 中繼承的使用方法。


1、繼承的定義

當多個類存在相同的屬性和方法時,可以選擇講這些共同的部分抽象為一個父類,其他的子類就可以繼承父類的屬性和行為,使得子類對象獲得和父類對象同樣的屬性和方法。

繼承的圖例

繼承的優(yōu)點

(1)提高代碼的復(fù)用性。

(2)類與類之間產(chǎn)生了聯(lián)系,是多態(tài)的前提。


2、繼承的格式

通過 extends 關(guān)鍵字,可以聲明一個子類繼承了一個父類,定義格式:

public class 父類名稱{//定義父類的格式
..........
}

public class 子類名稱 extends 父類名稱{
...........//定義子類格式
}


3、成員變量重名

在父子類繼承關(guān)系中,如果成員變量重名了,則創(chuàng)建子類對象,有兩種訪問方式:

(1)直接通過子類對象訪問成員變量。

等號左邊是誰,就優(yōu)先用誰,沒有則向上找。

(2)間接通過成員方法訪問成員變量。

成員方法屬于誰,就優(yōu)先用誰,沒有則向上找。

public class Demo02ExtendsField {
    public static void main(String[] args) {
        Father father = new Father();//創(chuàng)建父類對象
        System.out.println(father.numFather);
        System.out.println("====================");

        Son son = new Son();
        System.out.println(son.numFather);//10
        System.out.println(son.numSon);
        System.out.println("====================");

        System.out.println(son.num );//優(yōu)先子類200
        System.out.println("===================");

        son.methodSon();//這個方法定義在子類,優(yōu)先用子類,沒有再向上找
        son.methodFather(); //這個方法在父類中定義的
    }
}


public class Father {
    int numFather = 10;
    int num = 100;

    public void methodFather(){
        System.out.println(num);
    }
}


public class Son extends Father{
    int numSon = 20;
    int num = 200;

    public void methodSon(){
        System.out.println(num);
    }
}

注:也可以通過 super 關(guān)鍵字來訪問父類中的同名變量;this 關(guān)鍵用來訪問本類中的同名變量。


4、成員方法重名

如果父子類中都出現(xiàn)了重名的成員方法,一般使用重寫(Override)來進行訪問。

方法重寫:如果子類出現(xiàn)和父類中一模一樣的成員方法(返回類型、方法名和參數(shù)列表完全相同),就會出現(xiàn)覆蓋效果,也就是重寫。即聲明不變,重新實現(xiàn)。

重寫特點:創(chuàng)建的是誰,就優(yōu)先用誰的方法;只會向上找父類,而不會向下去找子類。


public class Demo04ExtendsMethod {
    public static void main(String[] args) {
        Son son = new Son();
        son.methodFather();
        son.methodSon();
        System.out.println("===========");
        son.method();
    }
}


public class Father {
    public void methodFather(){
        System.out.println("父類方法執(zhí)行!");
    }

    public void method(){
        System.out.println("父類方法重名執(zhí)行!");
    }
}

public class Son extends Father {
    public void methodSon(){
        System.out.println("子類方法執(zhí)行!");
    }

    @Override
    public void method(){
        System.out.println("子類方法重名執(zhí)行!");
    }
}

方法重寫的注意事項:

(1)必須保證父子類之間方法的方法名和參數(shù)列表一致。

(2)子類返回數(shù)據(jù)類型必須小于父類的返回數(shù)據(jù)類型。

(3)子類方法的權(quán)限必須大等于父類的權(quán)限修飾符。

(4)方法復(fù)寫前加一個? @Override? 是用來檢測是否為有效的重寫。但這個不是必須的,可寫可不寫。

擴展:

(1)Object 類是所有類的公共最高父類(祖宗類)。

(2)public > protected > (deafult) > private  【(default)不是關(guān)鍵字,而表示權(quán)限修飾符留空?!?/p>


5、重寫的應(yīng)用場景

20200612220646719

public class Demo06Phone {
    public static void main(String[] args) {
        Phone phone = new Phone();
        phone.call();
        phone.send();
        phone.show();
        System.out.println("==========");

        NewPhone newPhone = new NewPhone();

        newPhone.call();
        newPhone.send();
        newPhone.show();
        System.out.println("==========");
    }
}

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

    public void send(){
        System.out.println("發(fā)短信");
    }
    public void show(){
        System.out.println("顯示號碼");
    }
}

public class NewPhone extends Phone {
    @Override
    public void show() {
        super.show();
        System.out.println("顯示姓名");
        System.out.println("顯示頭像");
    }
}


6、總結(jié)

以上就是 Java 中面向?qū)ο笕筇匦灾焕^承的全部內(nèi)容,如果想要了解更多關(guān)于 Java 面向?qū)ο蟮膬?nèi)容,請繼續(xù)關(guān)注W3Cschool,如果對您的學習有所幫助,還希望多多支持我們!


0 人點贊