CodeGym /Java Blog /ランダム /Javaのスーパーキーワード
John Squirrels
レベル 41
San Francisco

Javaのスーパーキーワード

ランダム グループに公開済み
superキーワードさまざまな状況で使用されます。この投稿を始める前に、理解を深めるために Java の継承について学ぶことをお勧めします。

Javaのスーパーキーワードとは何ですか?

Superは、スーパークラスのオーバーライドされたメソッドを呼び出したり、スーパークラスの非表示フィールドを参照したりするために使用できるキーワードです。

super キーワードをいつ、なぜ使用するのですか?

Java superキーワードには 3 つの明示的な用途があります。
  1. 子クラスにも同じ名前のデータメンバーがある場合、親クラスのデータ メンバーにアクセスします。
  2. 子クラスで親クラスのデフォルトまたはパラメーター化されたコンストラクターを呼び出します。
  3. 子クラスにオーバーライドされたメソッドがある場合は、子クラスで親クラスのメソッドを呼び出します。
例を使用して、上記の 3 つのケースをすべて理解しましょう。

例 1 - 親のデータ メンバーにアクセスする

例 1 は、 Carタイプの子クラスでVehicleクラスの属性またはデータ メンバーにどのようにアクセスできるかを示しています。よく理解するために、以下のスニペットを実行してください。

class Vehicle {

	String name = "vehicle";
}

class Car extends Vehicle {

	String name = "car";

	public void printMyName() {

		System.out.println(name);
	}

	public void printParentName() {

		// use super keyword to access 
		// parent's data member / attribute
		System.out.println(super.name);
	}

	public static void main(String[] args) {

		Car myCar = new Car();
		System.out.print("My Car's Name: "); 
		myCar.printMyName();
		
		// printing the parent's name 
		// using the super keyword 
		System.out.print("My Parent Vehicle's Name: "); 
		myCar.printParentName();
	}
}
出力
私の車の名前:車 私の親車両の名前:車

例 2 - 子クラスの親のコンストラクターにアクセスする

super()を明示的に呼び出すと、子クラス内の親クラスのデフォルトまたはパラメーター化されたコンストラクターの両方にアクセスできるようになります。以下はパラメーター化されたコンストラクターの例です。親 ie Shapeクラスのコンストラクターは、子 ie Triangleクラスで ( super()を使用して) 呼び出され、属性を設定します。以下のプログラムを実行して、出力を自分でテストしてください。

public class Shape {

	String name;

	public Shape(String n) {

		System.out.println("Shape() parameterized constructor called!");
		name = n;
	}
}

class Triangle extends Shape {
	
	int sides = 3;
	String color;

	public Triangle(String n, String c) {
		
		// The super keyword calls the parameterized 
		// constructor of the parent (Shape) with 
		// 'n' as a parameter 
		super(n);
		
		System.out.println("Triangle() parameterized constructor called!");
		this.color = c;
	}

	public static void main(String[] args) {

		Triangle myTriangle = new Triangle("Triangle Alpha", "Yellow");
		
		System.out.println(myTriangle.name);
		System.out.println(myTriangle.color);
	}
}
出力
Shape() パラメータ化されたコンストラクターが呼び出されました。Triangle() パラメーター化されたコンストラクターが呼び出されました。トライアングルアルファイエロー
クイック チャレンジ: 学習内容をテストするために、デフォルトのコンストラクターを使用して上記のプログラムを再設計します。また、super()がsuper(arg)とどのように異なるのかも確認してください。

例 3 - 子クラスの親のオーバーライドされたメソッドにアクセスする

例 3 は、子クラスでも定義されている親クラスのメソッドにアクセスする方法を示しています。以下のプログラムの親クラスSound は、メソッドvoice()を定義します。子クラスDrumにも同じ名前のメソッド、つまりvoice()があります。これは、メソッドの音声がサブクラスによってオーバーライドされることを意味します。以下のプログラムを実行して、子クラスで親クラスのメソッドを使用するために superキーワードがどのように必要であるかを学習します。

public class Sound {

	public void voice() {
		System.out.println("Play sound!");
	}
}

class Drum extends Sound {

	public void voice() {
		System.out.println("Play drums!");
	}

	public void play() {

		// The super keyword calls the 
		// voice() method of the parent 
		super.voice();
		voice();
	}
	
	public static void main(String[] args) {

		Drum myDrum = new Drum();
		myDrum.play();
	}
}
出力
Shape() パラメータ化されたコンストラクターが呼び出されました。Triangle() パラメーター化されたコンストラクターが呼び出されました。トライアングルアルファイエロー

結論

この投稿を読み終えるまでに、 Java のsuperキーワードの仕組みを理解できるようになることを願っています。実践的にコーディングを学ぶことをお勧めします。実践はロジック構築を学ぶための究極の鍵です。行き詰まったときはいつでも、この投稿を歓迎します。それまで、楽しく学んでください!
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION