1. 程式人生 > >Java中this和super關鍵字區別

Java中this和super關鍵字區別

1.  super關鍵字表示的是子類呼叫父類的中指定的操作。例如:呼叫屬性,方法,構造等.  因為在子類例項化的時候會預設呼叫父類的無參構方法,如果現在希望呼叫友殘構造,則必須在子類中明確的宣告。

舉例:

public class ExtDemo05 {

public static void main(String[] args){

Son2 son2 = new Son2();

son2.fun();

}

}

class Father2{

public String info = "父類Nishuibaichuan";

int age;

public Father2(){

System.out.println("父類hello,java!") ;

}

public Father2(int age){

System.out.println("小明今年:" + age ) ;

}

}

class Son2 extends Father2{

public String info = "子類Hello";

void fun(){

System.out.println("呼叫 的屬性為:" + info) ;

System.out.println("呼叫 的屬性為:" + super.info) ;

}

public Son2(){

super(18);

System.out.println("子類nishuibaichuan ,java!") ;

}

}

小明今年:18
子類nishuibaichuan ,java!
呼叫 的屬性為:子類Hello
呼叫 的屬性為:父類Nishuibaichuan

2.  比較二者區別(以下內容都是在繼承的條件下成立)

(1)屬性訪問:

this 訪問本類中的屬性,如果本類中沒有找到此屬性,則從父類中繼續查詢。

super 訪問父類中的屬性。

(2)方法訪問:

this 訪問本類中的方法,如果在本類中沒有此方法,則在父類中繼續查詢。

super 直接訪問父類中的方法。

(3)呼叫構造方法:

this 呼叫本類中的構造方法,必須放在構造方法首行,他是根據不同引數個數,呼叫對應本類的不同引數個數的構造方法。

(4) 特殊:

this 表示當前物件

super無此概念

注:對於this 和super本身都可以呼叫構造方法,而且呼叫的時候都必須放在構造方法的首行,所以這兩個關鍵字肯定不能同時出現!

(5)重點!

public class Abstract1 {

public static void main(String[] args){

S s = new S("nishuibaichuan",21);

}

}

class Q{

public Q(){

System.out.println("我是父類中無參構造方法!");

}

public Q(int age){

System.out.println("我是父類中有一個參構造方法!今年:" + age);

}

}

class S extends Q {

public S(){

System.out.println("我是子類無參構造方法!");

}

public S(int age){

System.out.println("我是子類有一個參構造方法!今年:" + age);

}

public S(String name,int age){

this(21);

System.out.println("我是子類有一個參構造方法!今年:" + age + ",叫:" + name);

}

}

執行結果:

我是父類中無參構造方法!
我是子類有一個參構造方法!今年:21
我是子類有一個參構造方法!今年:21,叫:nishuibaichuan

由以上執行結果可知:無論在main()中子類例項化過程中,它括號中的引數有幾個(S s = new S("nishuibaichuan",21);),他都會呼叫父類中的無參構造方法!!!!