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);),他都會呼叫父類中的無參構造方法!!!!