Java Language
スーパーキーワード
サーチ…
スーパーキーワードの使用例
スーパーキーワードは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