2017年5月1日 星期一

Java : this() 與 super() 用法

在Java裡我們經常會在建構子裡看到this()和super()這兩個敘述,那麼這兩個敘述到底有什麼意思呢? 其實它們在Java當中都是用來呼叫建構子的方法,不過這兩者仍然是有差異的:

this():呼叫同一類別內的其他建構式。

super():從子類別呼叫其父類別的建構式。

要特別注意的是:這兩種敘述都必須寫在建構子內的第一行,所以同一建構子內部不能同時存在this()和super()。另外,當建構子有多載(overloading)時,this()和super()都會根據()內的引數來判斷要呼叫哪一個建構子。


範例:

this():


class Car{
 
 
 public Car(){
  System.out.println("無參數的建構子");
 }
 public Car(int n,double gas){
  this();
  System.out.println("有參數的建構子");
 }
 
}

public class Sample {

 public static void main(String[] args) {
  
  Car c1 = new Car(123,25.0);
 }

}
/*
執行結果: 
無參數的建構子
有參數的建構子
*/

super():


class Car{
 
 
 public Car(){
  System.out.println("無參數的建構子");
 }
 public Car(int n,double gas){
  this();
  System.out.println("有參數的建構子");
 }
 
}
class RacingCar extends Car{
 public RacingCar(){
  super();
 }
}

public class Sample {

 public static void main(String[] args) {
  
  RacingCar c1 = new RacingCar();
 }

}
//執行結果: 無參數的建構子

沒有留言:

張貼留言