1. 程式人生 > >java學習——super和this

java學習——super和this

構造器(建構函式)

子類不能繼承父類的構造器(構造方法或者建構函式),如果父類的構造器帶有引數,則必須在子類的構造器中顯式地通過 super 關鍵字呼叫父類的構造器並配以適當的引數列表。

如果父類構造器沒有引數,則在子類的構造器中不需要使用 super 關鍵字呼叫父類構造器,系統會自動呼叫父類的無參構造器。

package test_script;
class SuperClass{
    SuperClass(){
        System.out.println("SuperClass()");
    }
    SuperClass(int n){
        System.out.println("SuperClass(int n)");
    }
}
class SubClass extends SuperClass{
    private int n;
    SubClass(){
        super(300);
        System.out.println("SubClass()");

    }
    SubClass(int n){
        System.out.println("SubClass(int n):"+n);
        this.n=n;
    }
}

public class TestSuperSub {
    public static void main(String[] args){
        SubClass sc=new SubClass();
        SubClass sc1=new SubClass(200);
    }
}

執行結果:

SuperClass(int n)  //通過super(300)呼叫了父類的有參構造器
SubClass()
SuperClass()      //系統自動呼叫了父類的元參構造器
SubClass(int n):200

2、super和this:

super關鍵字:我們可以通過super關鍵字來實現對父類成員的訪問,用來引用當前物件的父類。

this關鍵字:指向自己的引用。

package test_script;

class Animal{
    void eat(){
        System.out.println("animal:eat");
    }
}
class joy extends Animal{
    void eat(){
        System.out.println("dog:eat");
    }
    void eatTest(){
        this.eat(); //指向自己的引用
        super.eat();//我們可以通過super關鍵字來實現對父類成員的訪問,用來引用當前物件的父類
    }
}

public class Test {
   public static void main(String[] args){
       joy j=new joy();
       j.eatTest();
   }
}

執行結果:

dog:eat
animal:eat