1. 程式人生 > >繼承、super與this的區別

繼承、super與this的區別

繼承

  說到繼承就想到了我們常說的子承父業,java中的繼承(extends)也就是運用了這種思想,這樣可以減少程式碼的重複率以及方便維護。

在這裡插入圖片描述

super與this的區別

super this
父類物件的引用 本類物件的引用
super.成員變數(或成員方法)

呼叫父類成員變數(或成員方法)

this.成員變數(或成員方法)

呼叫本類成員變數(或成員方法)

super(...)

呼叫父類構造方法

this(...)

呼叫本類構造方法

final、private關鍵字

final private
被修飾的類不能被繼承 被修飾的方法不能被繼承
被修飾的方法不能被繼承
被修飾的變數賦值完後,不能被重新賦值 被修飾的變數不能被繼承

程式碼演示

父類
public class Extend{
    public Extend() {
        System.out.println("我是父類構造方法");
    }
    public void show(){
        System.out.println("我是父類show方法");
    }
    final int i=100;
    String x="我是父類常量";
    private String p="我是父類私有變數";
    private void my(){
        System.out.println("我是父類私有方法");
    }
}

子類

public class Extend2 extends Extend{
    public Extend2() {
       // super();系統隱藏的,你也可以寫出來,這就是為什麼父類建構函式會先執行的原因
        System.out.println("我是子類構造方法");
    }
    @Override
    public void show() {
        System.out.println("我是子類重寫的show方法");
    }
}

測試類

public class Text {
    public static void main(String[] args) {
        Extend2 e=new Extend2();//建立Extend物件e
        System.out.println(e.x);
        System.out.println(e.i);
       // System.out.println(e.p);這句話會出錯
        e.show();
      //  e.my();這句話會出錯
    }
}

結果

我是父類構造方法
我是子類構造方法
我是父類常量
100
我是子類重寫的show方法

  通過結果可以看出例項化子類時,回會先對父類建構函式進行例項化,其次是子類建構函式,重寫過後的函式,結果也會是重寫的內容,常量也被繼承下來了,但是私有方法變數卻不能被呼叫。