超級關鍵字使用示例

super 關鍵字在三個地方扮演重要角色

  1. 建構函式級別
  2. 方法級別
  3. 可變等級

建構函式級別

super 關鍵字用於呼叫父類建構函式。此建構函式可以是預設建構函式或引數化建構函式。

  • 預設建構函式:super();

  • 引數化建構函式:super(int no, double amount, String name);

     class Parentclass
     {
        Parentclass(){
           System.out.println("Constructor of Superclass");
        }
     }
     class Subclass extends Parentclass
     {
        Subclass(){
         /* Compile adds super() here at the first line
          * of this constructor implicitly
          */
         System.out.println("Constructor of Subclass");
        }
        Subclass(int n1){
         /* Compile adds super() here at the first line
          * of this constructor implicitly
          */
         System.out.println("Constructor with arg");
        }
        void display(){
         System.out.println("Hello");
        }
        public static void main(String args[]){
         // Creating object using default constructor
         Subclass obj= new Subclass();
         //Calling sub class method 
            obj.display();
            //Creating object 2 using arg constructor
            Subclass obj2= new Subclass(10);
            obj2.display();
       }
     }
    

注意super() 必須是建構函式中的第一個語句,否則我們將得到編譯錯誤訊息。

方法級別

super 關鍵字也可以在方法重寫的情況下使用。super 關鍵字可用於呼叫或呼叫父類方法。

class Parentclass
{
   //Overridden method
   void display(){
    System.out.println("Parent class method");
   }
}
class Subclass extends Parentclass
{
   //Overriding method
   void display(){
    System.out.println("Child class method");
   }
   void printMsg(){
    //This would call Overriding method
    display();
    //This would call Overridden method
    super.display();
   }
   public static void main(String args[]){        
    Subclass obj= new Subclass();
    obj.printMsg(); 
   }
}

注意 :如果沒有方法重寫,那麼我們不需要使用 super 關鍵字來呼叫父類方法。

可變等級

super 用於引用直接父類例項變數。在繼承的情況下,可能有基類和派生類可能有類似的資料成員。為了區分基類/父類和派生/子類的資料成員,在派生類的上下文中基類資料成員必須以 super 關鍵字開頭。

//Parent class or Superclass
class Parentclass
{
    int num=100;
}
//Child class or subclass
class Subclass extends Parentclass
{
    /* I am declaring the same variable 
     * num in child class too.
     */
    int num=110;
    void printNumber(){
     System.out.println(num); //It will print value 110
     System.out.println(super.num); //It will print value 100
    }
    public static void main(String args[]){
       Subclass obj= new Subclass();
       obj.printNumber();    
    }
}

注意 :如果我們不在基類資料成員名稱之前寫入 super 關鍵字,那麼它將被稱為當前類資料成員,而基類資料成員將隱藏在派生類的上下文中。