Java (九) this與super關鍵字在繼承中的使用

1. 閒話不說,拋出問題:

代碼及運行結果如下:
Base.java

package xiaoyu.test;

class Base {
    String a = "Base1";

    private String showMe() {
        return "Base2";
    }

    public void print() {
        System.out.println(this.showMe() + " " + this.a + " " + this + " " + super.toString());
    }

}

Sub.java

package xiaoyu.test;

public class Sub extends Base {
    String a = "Sub";

    public static void main(String[] args) {
        Sub sub = new Sub();
        sub.print();
    }
}

運行結果:
這裏寫圖片描述

2. 運行結果分析

先明確基礎知識:

  • 繼承:首先,Public 類型的 Sub 類繼承了 Base 類,也就擁有了 Base 類的所有變量和方法,但是如果Sub類能直接訪問的必須是 Public 類型的變量和方法,如果Sub類想要訪問 Base 類的私有變量和方法,則必須藉助公有接口(方法)。
  • this關鍵字:兩個用途:一是引用隱式參數,二是調用該類其他的構造器。
  • super關鍵字:兩個用途:一是調用父類的方法,二是調用父類的構造器。

運行結果分析:
首先,由於 Sub 類沒有重寫父類的print() 方法,所以這裏調用的print()方法是從父類中繼承的,所以這裏實質上執行的是父類的方法。那麼,問題來了:

  1. 既然是正在執行父類的方法,那麼this關鍵字打印出來的爲何是子類 Sub 的一個實例對象?如果this是子類Sub的一個引用對象的話,this 是沒有權限調用父類的私有方法showMe()的。
  2. super.toString() 的打印結果爲何是Sub類的一個實例?

3. 望大神指教!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章