サーチ…


スーパーキーワードの使用例

スーパーキーワードは3つの場所で重要な役割を果たす

  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キーワードを記述していない場合、それは現在のクラスデータメンバと呼ばれ、ベースクラスのデータメンバは派生クラスのコンテキスト内に隠されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow