欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文詳細(xì)講解Java的父子繼承、方法的重寫(xiě)與super關(guān)鍵字

 更新時(shí)間:2024年10月10日 08:35:08   作者:碼嘍的自我修養(yǎng)  
Java中繼承是通過(guò)extends關(guān)鍵字實(shí)現(xiàn),幫助減少代碼重復(fù),提高復(fù)用性,子類(lèi)繼承父類(lèi)的屬性和方法,但私有成員除外,方法重寫(xiě)(override)使子類(lèi)改造父類(lèi)方法以適應(yīng)新功能,這篇文章主要介紹了Java的父子繼承、方法的重寫(xiě)與super關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下

一、java的繼承

1.舉例

多個(gè)類(lèi)中存在相同屬性和行為時(shí),將這些內(nèi)容抽取到單獨(dú)一個(gè)類(lèi)中,那么多個(gè)類(lèi)中無(wú)需再定義這些屬性和行為,只需要和抽取出來(lái)的類(lèi)構(gòu)成繼承關(guān)系。如圖所示:  

再舉例:  

2. 繼承的好處

  • 繼承的出現(xiàn)減少了代碼冗余,提高了代碼的復(fù)用性。

  • 繼承的出現(xiàn),更有利于功能的擴(kuò)展。

  • 繼承的出現(xiàn)讓類(lèi)與類(lèi)之間產(chǎn)生了is-a的關(guān)系,為多態(tài)的使用提供了前提。

    • 繼承描述事物之間的所屬關(guān)系,這種關(guān)系是:is-a 的關(guān)系??梢?jiàn),父類(lèi)更通用、更一般,子類(lèi)更具體。

注意:不要僅為了獲取其他類(lèi)中某個(gè)功能而去繼承!

3. 繼承的語(yǔ)法

3.1 繼承中的語(yǔ)法格式

通過(guò) extends 關(guān)鍵字,可以聲明一個(gè)類(lèi)B繼承另外一個(gè)類(lèi)A,定義格式如下:

[修飾符] class 類(lèi)A {
	...
}

[修飾符] class 類(lèi)B extends 類(lèi)A {
	...
}

3.2 繼承中的基本概念

類(lèi)B,稱(chēng)為子類(lèi)、派生類(lèi)(derived class)、SubClass

類(lèi)A,稱(chēng)為父類(lèi)、超類(lèi)、基類(lèi)(base class)、SuperClass

3.3 代碼舉例

1、父類(lèi)

package com.atguigu.inherited.grammar;

/*
 * 定義動(dòng)物類(lèi)Animal,做為父類(lèi)
 */
public class Animal {
    // 定義name屬性
    String name;
    // 定義age屬性
    int age;

    // 定義動(dòng)物的吃東西方法
    public void eat() {
        System.out.println(age + "歲的"
                + name + "在吃東西");
    }
}

2、子類(lèi)

package com.atguigu.inherited.grammar;

/*
 * 定義貓類(lèi)Cat 繼承 動(dòng)物類(lèi)Animal
 */
public class Cat extends Animal {
    int count;//記錄每只貓抓的老鼠數(shù)量

    // 定義一個(gè)貓抓老鼠的方法catchMouse
    public void catchMouse() {
        count++;
        System.out.println("抓老鼠,已經(jīng)抓了"
                + count + "只老鼠");
    }
}

3、測(cè)試類(lèi)

package com.atguigu.inherited.grammar;

public class TestCat {
    public static void main(String[] args) {
        // 創(chuàng)建一個(gè)貓類(lèi)對(duì)象
        Cat cat = new Cat();
        // 為該貓類(lèi)對(duì)象的name屬性進(jìn)行賦值
        cat.name = "Tom";
        // 為該貓類(lèi)對(duì)象的age屬性進(jìn)行賦值
        cat.age = 2;
        // 調(diào)用該貓繼承來(lái)的eat()方法
        cat.eat();
        // 調(diào)用該貓的catchMouse()方法
        cat.catchMouse();
        cat.catchMouse();
        cat.catchMouse();
    }
}

3.4 繼承性的細(xì)節(jié)說(shuō)明

1、子類(lèi)會(huì)繼承父類(lèi)所有的實(shí)例變量和實(shí)例方法

從類(lèi)的定義來(lái)看,類(lèi)是一類(lèi)具有相同特性的事物的抽象描述。父類(lèi)是所有子類(lèi)共同特征的抽象描述。而實(shí)例變量和實(shí)例方法就是事物的特征,那么父類(lèi)中聲明的實(shí)例變量和實(shí)例方法代表子類(lèi)事物也有這個(gè)特征。

  • 當(dāng)子類(lèi)對(duì)象被創(chuàng)建時(shí),在堆中給對(duì)象申請(qǐng)內(nèi)存時(shí),就要看子類(lèi)和父類(lèi)都聲明了什么實(shí)例變量,這些實(shí)例變量都要分配內(nèi)存。

  • 當(dāng)子類(lèi)對(duì)象調(diào)用方法時(shí),編譯器會(huì)先在子類(lèi)模板中看該類(lèi)是否有這個(gè)方法,如果沒(méi)找到,會(huì)看它的父類(lèi)甚至父類(lèi)的父類(lèi)是否聲明了這個(gè)方法,遵循從下往上找的順序,找到了就停止,一直到根父類(lèi)都沒(méi)有找到,就會(huì)報(bào)編譯錯(cuò)誤。

所以繼承意味著子類(lèi)的對(duì)象除了看子類(lèi)的類(lèi)模板還要看父類(lèi)的類(lèi)模板。

2、子類(lèi)不能直接訪問(wèn)父類(lèi)中私有的(private)的成員變量和方法

子類(lèi)雖會(huì)繼承父類(lèi)私有(private)的成員變量,但子類(lèi)不能對(duì)繼承的私有成員變量直接進(jìn)行訪問(wèn),可通過(guò)繼承的get/set方法進(jìn)行訪問(wèn)。如圖所示:

3、在Java 中,繼承的關(guān)鍵字用的是“extends”,即子類(lèi)不是父類(lèi)的子集,而是對(duì)父類(lèi)的“擴(kuò)展”

子類(lèi)在繼承父類(lèi)以后,還可以定義自己特有的方法,這就可以看做是對(duì)父類(lèi)功能上的擴(kuò)展。

4、Java支持多層繼承(繼承體系)

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

 說(shuō)明:

  • 子類(lèi)和父類(lèi)是一種相對(duì)的概念

  • 頂層父類(lèi)是Object類(lèi)。所有的類(lèi)默認(rèn)繼承Object,作為父類(lèi)。

 5、一個(gè)父類(lèi)可以同時(shí)擁有多個(gè)子類(lèi)*

class A{}
class B extends A{}
class D extends A{}
class E extends A{}

6、Java只支持單繼承,不支持多重繼承

public class A{}
class B extends A{}

//一個(gè)類(lèi)只能有一個(gè)父類(lèi),不可以有多個(gè)直接父類(lèi)。
class C extends B{} 	//ok
class C extends A,B...	//error

二、方法的重寫(xiě)(override/overwrite)

父類(lèi)的所有方法子類(lèi)都會(huì)繼承,但是當(dāng)某個(gè)方法被繼承到子類(lèi)之后,子類(lèi)覺(jué)得父類(lèi)原來(lái)的實(shí)現(xiàn)不適合于自己當(dāng)前的類(lèi),該怎么辦呢?子類(lèi)可以對(duì)從父類(lèi)中繼承來(lái)的方法進(jìn)行改造,我們稱(chēng)為方法的重寫(xiě) (override、overwrite)。也稱(chēng)為方法的重置、覆蓋

在程序執(zhí)行時(shí),子類(lèi)的方法將覆蓋父類(lèi)的方法。

2.1 方法重寫(xiě)舉例

比如新的手機(jī)增加來(lái)電顯示頭像的功能,代碼如下:

package com.atguigu.inherited.method;

public class Phone {
    public void sendMessage(){
        System.out.println("發(fā)短信");
    }
    public void call(){
        System.out.println("打電話(huà)");
    }
    public void showNum(){
        System.out.println("來(lái)電顯示號(hào)碼");
    }
}
package com.atguigu.inherited.method;

//SmartPhone:智能手機(jī)
public class SmartPhone extends Phone{
    //重寫(xiě)父類(lèi)的來(lái)電顯示功能的方法
	@Override
    public void showNum(){
        //來(lái)電顯示姓名和圖片功能
        System.out.println("顯示來(lái)電姓名");
        System.out.println("顯示頭像");
    }
    //重寫(xiě)父類(lèi)的通話(huà)功能的方法
    @Override
    public void call() {
        System.out.println("語(yǔ)音通話(huà) 或 視頻通話(huà)");
    }
}
package com.atguigu.inherited.method;

public class TestOverride {
    public static void main(String[] args) {
        // 創(chuàng)建子類(lèi)對(duì)象
        SmartPhone sp = new SmartPhone();

        // 調(diào)用父類(lèi)繼承而來(lái)的方法
        sp.call();

        // 調(diào)用子類(lèi)重寫(xiě)的方法
        sp.showNum();
    }
}

 @Override使用說(shuō)明

寫(xiě)在方法上面,用來(lái)檢測(cè)是不是滿(mǎn)足重寫(xiě)方法的要求。這個(gè)注解就算不寫(xiě),只要滿(mǎn)足要求,也是正確的方法覆蓋重寫(xiě)。建議保留,這樣編譯器可以幫助我們檢查格式,另外也可以讓閱讀源代碼的程序員清晰的知道這是一個(gè)重寫(xiě)的方法。

2.2 方法重寫(xiě)的要求

  • 子類(lèi)重寫(xiě)的方法必須和父類(lèi)被重寫(xiě)的方法具有相同的方法名稱(chēng)、參數(shù)列表。

  • 子類(lèi)重寫(xiě)的方法的返回值類(lèi)型不能大于父類(lèi)被重寫(xiě)的方法的返回值類(lèi)型。(例如:Student < Person)。

注意:如果返回值類(lèi)型是基本數(shù)據(jù)類(lèi)型和void,那么必須是相同

       3. 子類(lèi)重寫(xiě)的方法使用的訪問(wèn)權(quán)限不能小于父類(lèi)被重寫(xiě)的方法的訪問(wèn)權(quán)限。(public > protected > 缺省 > private)

注意:① 父類(lèi)私有方法不能重寫(xiě) ② 跨包的父類(lèi)缺省的方法也不能重寫(xiě)

         4.子類(lèi)方法拋出的異常不能大于父類(lèi)被重寫(xiě)方法的異常

此外,子類(lèi)與父類(lèi)中同名同參數(shù)的方法必須同時(shí)聲明為非static的(即為重寫(xiě)),或者同時(shí)聲明為static的(不是重寫(xiě))。因?yàn)閟tatic方法是屬于類(lèi)的,子類(lèi)無(wú)法覆蓋父類(lèi)的方法。

2.3 小結(jié):方法的重載與重寫(xiě)區(qū)別

方法的重載:方法名相同,形參列表不同。不看返回值類(lèi)型。

方法的重寫(xiě):見(jiàn)上面。

(1)同一個(gè)類(lèi)中的方法只會(huì)存在重載

package com.atguigu.inherited.method;

public class TestOverload {
    public int max(int a, int b){
        return a > b ? a : b;
    }
    public double max(double a, double b){
        return a > b ? a : b;
    }
    public int max(int a, int b,int c){
        return max(max(a,b),c);
    }
}

(2)父子類(lèi)中,即可能有重載也可以有重寫(xiě)

package com.atguigu.inherited.method;

public class TestOverloadOverride {
    public static void main(String[] args) {
        Son s = new Son();
        s.method(1);//只有一個(gè)形式的method方法

        Daughter d = new Daughter();
        d.method(1);
        d.method(1,2);//有兩個(gè)形式的method方法
    }
}

class Father{
    public void method(int i){
        System.out.println("Father.method");
    }
}
class Son extends Father{
    public void method(int i){//重寫(xiě)
        System.out.println("Son.method");
    }
}
class Daughter extends Father{
    public void method(int i,int j){//重載
        System.out.println("Daughter.method");
    }
}

三、關(guān)鍵字:super

3.1 super的理解

在Java類(lèi)中使用super來(lái)調(diào)用父類(lèi)中的指定操作:

  • super可用于訪問(wèn)父類(lèi)中定義的屬性

  • super可用于調(diào)用父類(lèi)中定義的成員方法

  • super可用于在子類(lèi)構(gòu)造器中調(diào)用父類(lèi)的構(gòu)造器

注意:

  • 尤其當(dāng)子父類(lèi)出現(xiàn)同名成員時(shí),可以用super表明調(diào)用的是父類(lèi)中的成員

  • super的追溯不僅限于直接父類(lèi)

  • super和this的用法相像,this代表本類(lèi)對(duì)象的引用,super代表父類(lèi)的內(nèi)存空間的標(biāo)識(shí)

3.2 super的使用場(chǎng)景

3.2.1 子類(lèi)中調(diào)用父類(lèi)被重寫(xiě)的方法

  • 如果子類(lèi)沒(méi)有重寫(xiě)父類(lèi)的方法,只要權(quán)限修飾符允許,在子類(lèi)中完全可以直接調(diào)用父類(lèi)的方法;

  • 如果子類(lèi)重寫(xiě)了父類(lèi)的方法,在子類(lèi)中需要通過(guò)super.才能調(diào)用父類(lèi)被重寫(xiě)的方法,否則默認(rèn)調(diào)用的子類(lèi)重寫(xiě)的方法

舉例:

package com.atguigu.inherited.method;

public class Phone {
    public void sendMessage(){
        System.out.println("發(fā)短信");
    }
    public void call(){
        System.out.println("打電話(huà)");
    }
    public void showNum(){
        System.out.println("來(lái)電顯示號(hào)碼");
    }
}

//smartphone:智能手機(jī)
public class SmartPhone extends Phone{
    //重寫(xiě)父類(lèi)的來(lái)電顯示功能的方法
    public void showNum(){
        //來(lái)電顯示姓名和圖片功能
        System.out.println("顯示來(lái)電姓名");
        System.out.println("顯示頭像");

        //保留父類(lèi)來(lái)電顯示號(hào)碼的功能
        super.showNum();//此處必須加super.,否則就是無(wú)限遞歸,那么就會(huì)棧內(nèi)存溢出
    }
}

總結(jié):

  • 方法前面沒(méi)有super.和this.

    • 先從子類(lèi)找匹配方法,如果沒(méi)有,再?gòu)闹苯痈割?lèi)找,再?zèng)]有,繼續(xù)往上追溯

  • 方法前面有this.

    • 先從子類(lèi)找匹配方法,如果沒(méi)有,再?gòu)闹苯痈割?lèi)找,再?zèng)]有,繼續(xù)往上追溯

  • 方法前面有super.

    • 從當(dāng)前子類(lèi)的直接父類(lèi)找,如果沒(méi)有,繼續(xù)往上追溯

3.2.2 子類(lèi)中調(diào)用父類(lèi)中同名的成員變量

  • 如果實(shí)例變量與局部變量重名,可以在實(shí)例變量前面加this.進(jìn)行區(qū)別

  • 如果子類(lèi)實(shí)例變量和父類(lèi)實(shí)例變量重名,并且父類(lèi)的該實(shí)例變量在子類(lèi)仍然可見(jiàn),在子類(lèi)中要訪問(wèn)父類(lèi)聲明的實(shí)例變量需要在父類(lèi)實(shí)例變量前加super.,否則默認(rèn)訪問(wèn)的是子類(lèi)自己聲明的實(shí)例變量

  • 如果父子類(lèi)實(shí)例變量沒(méi)有重名,只要權(quán)限修飾符允許,在子類(lèi)中完全可以直接訪問(wèn)父類(lèi)中聲明的實(shí)例變量,也可以用this.實(shí)例訪問(wèn),也可以用super.實(shí)例變量訪問(wèn)

舉例:

class Father{
	int a = 10;
	int b = 11;
}
class Son extends Father{
	int a = 20;
    
    public void test(){
		//子類(lèi)與父類(lèi)的屬性同名,子類(lèi)對(duì)象中就有兩個(gè)a
		System.out.println("子類(lèi)的a:" + a);//20  先找局部變量找,沒(méi)有再?gòu)谋绢?lèi)成員變量找
        System.out.println("子類(lèi)的a:" + this.a);//20   先從本類(lèi)成員變量找
        System.out.println("父類(lèi)的a:" + super.a);//10    直接從父類(lèi)成員變量找
		
		//子類(lèi)與父類(lèi)的屬性不同名,是同一個(gè)b
		System.out.println("b = " + b);//11  先找局部變量找,沒(méi)有再?gòu)谋绢?lèi)成員變量找,沒(méi)有再?gòu)母割?lèi)找
		System.out.println("b = " + this.b);//11   先從本類(lèi)成員變量找,沒(méi)有再?gòu)母割?lèi)找
		System.out.println("b = " + super.b);//11  直接從父類(lèi)局部變量找
	}
	
	public void method(int a, int b){
		//子類(lèi)與父類(lèi)的屬性同名,子類(lèi)對(duì)象中就有兩個(gè)成員變量a,此時(shí)方法中還有一個(gè)局部變量a		
		System.out.println("局部變量的a:" + a);//30  先找局部變量
        System.out.println("子類(lèi)的a:" + this.a);//20  先從本類(lèi)成員變量找
        System.out.println("父類(lèi)的a:" + super.a);//10  直接從父類(lèi)成員變量找

        System.out.println("b = " + b);//13  先找局部變量
		System.out.println("b = " + this.b);//11  先從本類(lèi)成員變量找
		System.out.println("b = " + super.b);//11  直接從父類(lèi)局部變量找
    }
}
class Test{
    public static void main(String[] args){
        Son son = new Son();
		son.test();
		son.method(30,13);  
    }
}

總結(jié):起點(diǎn)不同(就近原則)

  • 變量前面沒(méi)有super.和this.

    • 在構(gòu)造器、代碼塊、方法中如果出現(xiàn)使用某個(gè)變量,先查看是否是當(dāng)前塊聲明的局部變量,

    • 如果不是局部變量,先從當(dāng)前執(zhí)行代碼的本類(lèi)去找成員變量

    • 如果從當(dāng)前執(zhí)行代碼的本類(lèi)中沒(méi)有找到,會(huì)往上找父類(lèi)聲明的成員變量(權(quán)限修飾符允許在子類(lèi)中訪問(wèn)的)

  • 變量前面有this.

    • 通過(guò)this找成員變量時(shí),先從當(dāng)前執(zhí)行代碼的==本類(lèi)去找成員變量==

    • 如果從當(dāng)前執(zhí)行代碼的本類(lèi)中沒(méi)有找到,會(huì)往上找==父類(lèi)聲明的成員變量(==權(quán)限修飾符允許在子類(lèi)中訪問(wèn)的)

  • 變量前面super.

    • 通過(guò)super找成員變量,直接從當(dāng)前執(zhí)行代碼的直接父類(lèi)去找成員變量(權(quán)限修飾符允許在子類(lèi)中訪問(wèn)的)

    • 如果直接父類(lèi)沒(méi)有,就去父類(lèi)的父類(lèi)中找(權(quán)限修飾符允許在子類(lèi)中訪問(wèn)的)

特別說(shuō)明:應(yīng)該避免子類(lèi)聲明和父類(lèi)重名的成員變量

在阿里的開(kāi)發(fā)規(guī)范等文檔中都做出明確說(shuō)明:

3.2.3 子類(lèi)構(gòu)造器中調(diào)用父類(lèi)構(gòu)造器

① 子類(lèi)繼承父類(lèi)時(shí),不會(huì)繼承父類(lèi)的構(gòu)造器。只能通過(guò)“super(形參列表)”的方式調(diào)用父類(lèi)指定的構(gòu)造器。

② 規(guī)定:“super(形參列表)”,必須聲明在構(gòu)造器的首行。

③ 我們前面講過(guò),在構(gòu)造器的首行可以使用"this(形參列表)",調(diào)用本類(lèi)中重載的構(gòu)造器, 結(jié)合②,結(jié)論:在構(gòu)造器的首行,"this(形參列表)" 和 "super(形參列表)"只能二選一。

④ 如果在子類(lèi)構(gòu)造器的首行既沒(méi)有顯示調(diào)用"this(形參列表)",也沒(méi)有顯式調(diào)用"super(形參列表)",? 則子類(lèi)此構(gòu)造器默認(rèn)調(diào)用"super()",即調(diào)用父類(lèi)中空參的構(gòu)造器。

⑤ 由③和④得到結(jié)論:子類(lèi)的任何一個(gè)構(gòu)造器中,要么會(huì)調(diào)用本類(lèi)中重載的構(gòu)造器,要么會(huì)調(diào)用父類(lèi)的構(gòu)造器。 只能是這兩種情況之一。

⑥ 由⑤得到:一個(gè)類(lèi)中聲明有n個(gè)構(gòu)造器,最多有n-1個(gè)構(gòu)造器中使用了"this(形參列表)",則剩下的那個(gè)一定使用"super(形參列表)"。

開(kāi)發(fā)中常見(jiàn)錯(cuò)誤:

如果子類(lèi)構(gòu)造器中既未顯式調(diào)用父類(lèi)或本類(lèi)的構(gòu)造器,且父類(lèi)中又沒(méi)有空參的構(gòu)造器,則編譯出錯(cuò)

情景舉例1:

class A{
	A(){
		System.out.println("A類(lèi)無(wú)參構(gòu)造器");
	}
}
class B extends A{

}
class Test{
    public static void main(String[] args){
        B b = new B();
        //A類(lèi)顯示聲明一個(gè)無(wú)參構(gòu)造,
		//B類(lèi)默認(rèn)有一個(gè)無(wú)參構(gòu)造,
		//B類(lèi)的默認(rèn)無(wú)參構(gòu)造中會(huì)默認(rèn)調(diào)用A類(lèi)的無(wú)參構(gòu)造
        //可以看到會(huì)輸出“A類(lèi)無(wú)參構(gòu)造器"
    }
}

情景舉例2:

class A{
	A(){
		System.out.println("A類(lèi)無(wú)參構(gòu)造器");
	}
}
class B extends A{
	B(){
        super();
		System.out.println("B類(lèi)無(wú)參構(gòu)造器");
	}
}
class Test{
    public static void main(String[] args){
        B b = new B();
        //A類(lèi)顯示聲明一個(gè)無(wú)參構(gòu)造,
		//B類(lèi)顯示聲明一個(gè)無(wú)參構(gòu)造,        
		//B類(lèi)的無(wú)參構(gòu)造中明確寫(xiě)了super(),表示調(diào)用A類(lèi)的無(wú)參構(gòu)造
        //可以看到會(huì)輸出“A類(lèi)無(wú)參構(gòu)造器"和"B類(lèi)無(wú)參構(gòu)造器")
    }
}

情景舉例3:

class A{
	A(int a){
		System.out.println("A類(lèi)有參構(gòu)造器");
	}
}
class B extends A{
	B(){
		System.out.println("B類(lèi)無(wú)參構(gòu)造器");
	}
}
class Test05{
    public static void main(String[] args){
        B b = new B();
        //A類(lèi)顯示聲明一個(gè)有參構(gòu)造,沒(méi)有寫(xiě)無(wú)參構(gòu)造,那么A類(lèi)就沒(méi)有無(wú)參構(gòu)造了
		//B類(lèi)顯示聲明一個(gè)無(wú)參構(gòu)造,        
		//B類(lèi)的無(wú)參構(gòu)造沒(méi)有寫(xiě)super(...),表示默認(rèn)調(diào)用A類(lèi)的無(wú)參構(gòu)造
        //編譯報(bào)錯(cuò),因?yàn)锳類(lèi)沒(méi)有無(wú)參構(gòu)造
    }
}

情景舉例4:

class A{
	A(int a){
		System.out.println("A類(lèi)有參構(gòu)造器");
	}
}
class B extends A{
	B(int a){
		super(a);
		System.out.println("B類(lèi)有參構(gòu)造器");
	}
}
class Test07{
    public static void main(String[] args){
        B b = new B(10);
        //A類(lèi)顯示聲明一個(gè)有參構(gòu)造,沒(méi)有寫(xiě)無(wú)參構(gòu)造,那么A類(lèi)就沒(méi)有無(wú)參構(gòu)造了
		//B類(lèi)顯示聲明一個(gè)有參構(gòu)造,        
		//B類(lèi)的有參構(gòu)造明確寫(xiě)super(a),表示調(diào)用A類(lèi)的有參構(gòu)造
        //會(huì)打印“A類(lèi)有參構(gòu)造器"和"B類(lèi)有參構(gòu)造器"
    }
}

3.3 小結(jié):this與super區(qū)別

1、this和super的意義

this:當(dāng)前對(duì)象

  • 在構(gòu)造器和非靜態(tài)代碼塊中,表示正在new的對(duì)象

  • 在實(shí)例方法中,表示調(diào)用當(dāng)前方法的對(duì)象

super:引用父類(lèi)聲明的成員

2、this和super的使用格式

  • this

    • this.成員變量:表示當(dāng)前對(duì)象的某個(gè)成員變量,而不是局部變量

    • this.成員方法:表示當(dāng)前對(duì)象的某個(gè)成員方法,完全可以省略this.

    • this()或this(實(shí)參列表):調(diào)用另一個(gè)構(gòu)造器協(xié)助當(dāng)前對(duì)象的實(shí)例化,只能在構(gòu)造器首行,只會(huì)找本類(lèi)的構(gòu)造器,找不到就報(bào)錯(cuò)

  • super

    • super.成員變量:表示當(dāng)前對(duì)象的某個(gè)成員變量,該成員變量在父類(lèi)中聲明的

    • super.成員方法:表示當(dāng)前對(duì)象的某個(gè)成員方法,該成員方法在父類(lèi)中聲明的

    • super()或super(實(shí)參列表):調(diào)用父類(lèi)的構(gòu)造器協(xié)助當(dāng)前對(duì)象的實(shí)例化,只能在構(gòu)造器首行,只會(huì)找直接父類(lèi)的對(duì)應(yīng)構(gòu)造器,找不到就報(bào)錯(cuò)

總結(jié) 

到此這篇關(guān)于Java父子繼承、方法的重寫(xiě)與super關(guān)鍵字的文章就介紹到這了,更多相關(guān)Java父子繼承、方法的重寫(xiě)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論