Java中super關鍵字的用法及示例

主要是由Hadoop中的函數想到的,以前對super不太明白,寫了幾段代碼搞懂了。
@Override
protected void setup(Context context) throws IOException,
    InterruptedException {
    super.setup(context);
}

(1)子類的構造函數如果要引用super的話,必須把super放在函數的首位.
class Base {
    Base() {
       System.out.println("Base");
    }
}
 
public class Child extends Base {
     Child() {
       super();//調用父類的構造方法,一定要放在方法的首個語句
       System.out.println("Child");
    }
 
    public static void main(String argv[]) {
        Child c = new  Child();
    }
}

如果想用super繼承父類構造的方法,但是沒有放在第一行的話,那麼在super之前的語句,肯定是爲了滿足自己想要完成某些行爲的語句,但是又用了super繼承父類的構造方法。那麼以前所做的修改就都回到以前了,就是說又成了父類的構造方法了。
在Eclipse中,如果不放在首位,報錯:Constructor call must be the first statement in a constructor。
不用顯示調用,也可以。我估計是,如果構造函數有多個的時候,可以顯示指明哪一個。

(2)在Java中,有時還會遇到子類中的成員變量或方法與超類(有時也稱父類)中的成員變量或方法同名。因爲子類中的成員變量或方法名優先級高,所以子類中的同名成員變量或方法就隱藏了超類的成員變量或方法,但是我們如果想要使用超類中的這個成員變量或方法,就需要用到super.
class Country {
    String name="China";
//    private String name="China";//不能定義爲私有成員變量,否則在子類中就不能玩耍了
 
    String value(String name) {
     this.name = name;
     return this.name;
    }
}
 
class City extends Country {
    String name = "Shijiazhuang";
    String value(String name) {
     System.out.println(super.name);
     super.value("Fail");
     System.out.println(name);
     System.out.println(super.name);
     return name;
   }
 
    public static void main(String[] args) {
       City c=new City();
       c.value("Sucess");
    }
}
發佈了28 篇原創文章 · 獲贊 13 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章