logo

Javaのthisとsuperの違い

'これ' そしてその ' 素晴らしい' キーワードは、別のコンテキストで使用される予約語です。これに加えて、Java には次の機能もあります。 これ() そして 素晴らしい() コンストラクター コンテキストで使用されるコンストラクター。このセクションでは、 これとスーパーキーワードの違い そして this() および super() コンストラクター、 ジャワでは。

super キーワードと super() コンストラクター

スーパーキーワード

基本クラスのメソッドまたは変数を呼び出すために使用される予約キーワードは、 素晴らしい キーワード。は使用できません。 素晴らしい キーワードとして 識別子 。 super キーワードは、基本クラスのインスタンスを参照するだけでなく、静的メンバーも参照するために使用されます。

super() コンストラクター

素晴らしい() 主に、基本クラスのメンバー関数とコンストラクターを呼び出すために使用されます。

両方の例を見てみましょう 素晴らしい キーワードと 素晴らしい() それらがどのように機能するかを理解するために。

SuperExample1.java

 // import required classes and packages package javaTpoint.MicrosoftJava; // create Animal class which is base class of Animal class Animal{ // data member of Animal class String color = 'white'; } // create child class of Animal class Cat extends Animal{ //default constructor Cat() { // data members of the Cat class String color = 'Brown'; System.out.println('The cat is of color '+super.color); // calling parent class data member System.out.println('The cat is of color '+color); } } // create child class for Car class SuperExample1 extendsCat { // default constructor SuperExample1() { // calling base class constructor super(); System.out.println('The eyes of the cat is blue.'); } // main() method start publicstaticvoid main(String[] args) { // call default constructor of the SuperExample1 new SuperExample1(); System.out.println('Inside Main'); } } 

出力:

Javaのthisとsuper

main() メソッドで次のステートメントを作成しました。 new SuperExample1() 。のコンストラクターを呼び出します。 スーパー例 1 クラス。

コンストラクター内でステートメントを作成しました 素晴らしい() これは、その親クラスのコンストラクターを呼び出します。つまり、 猫。 コンストラクターでは、次の 3 つのステートメントを作成しました。

  1. 色を値で初期化する '茶色'。
  2. 親クラスのデータメンバーを出力します。
  3. 現在のクラスのデータ メンバーを出力します。

2 番目のステートメントが実行されると、プログラムのフローは Animal クラスにジャンプして、そのデータ メンバーの値にアクセスします。アクセス後は元に戻ります。 クラス コンストラクターを呼び出して出力します。その後、最後のステートメントが実行され、現在のクラスの変数の値が出力されます。

の最後のステートメントの実行後、 クラスに戻ると、フローはクラスのコンストラクターに戻ります。 スーパー例 1 そして残りのステートメントを実行します。

の実行が完了したら、 スーパー例1() 、フローは main() メソッドに戻り、残りのステートメントを実行します。

注: super() を使用するには、それがクラスのコンストラクターの最初のステートメントであることを確認する必要があります。これを使用して、親クラスのコンストラクターのみを参照できます。

this キーワードと this() コンストラクター

このキーワード

これは、現在のクラス オブジェクトを参照するために使用される Java の予約キーワードです。これはメソッドの呼び出しに使用される参照変数です。このキーワードのその他の用途は次のとおりです。

  • これを使用して、現在のクラスのインスタンス変数を参照できます。
  • これを使用して、現在のクラス メソッドを (暗黙的に) 呼び出すことができます。
  • これをメソッドおよびコンストラクター呼び出しの引数として渡すことができます。
  • メソッドから現在のクラス インスタンスを返すために使用することもできます。

this() コンストラクター

コンストラクターは、同じクラスの他のコンストラクターから 1 つのコンストラクターを呼び出すために使用されます。両方の例を見てみましょう これ キーワードと これ() それらがどのように機能するかを理解するために。

ThisExample1.java

 // import required classes and packages package javaTpoint.MicrosoftJava; // create ThisExample1 class to understand the working of this() and this class ThisExample1 { // initialize instance and static variable int x = 5; staticinty = 10; // default constructor of class ThisExample1 ThisExample1() { // invoking current class constructor this(5); System.out.println('We are insie of the default constructor.'); System.out.println('The value of x = '+x); } ThisExample1(int x) { this.x = x; // override value of the current class instance variable System.out.println('We are inside of the parameterized constructor.'); System.out.println('The value of y = '+y); } publicstaticvoid main(String[] args) { // invoking constructor of the current class new ThisExample1(); System.out.println('Inside Main'); } } 

出力:

Javaのthisとsuper

スーパーキーワードとの違い

次の表は、this と super の主な違いを説明しています。

これ 素晴らしい
クラスの現在のインスタンスは、このキーワードによって表されます。 親クラスの現在のインスタンスは super キーワードで表されます。
現在のクラスのデフォルトのコンストラクターを呼び出すには、このキーワードを使用できます。 親クラスのデフォルトのコンストラクターを呼び出すには、super キーワードを使用できます。
静的コンテキストから参照できます。これは、静的コンテキストから呼び出すことができることを意味します。 静的コンテキストからは参照できません。これは、静的コンテキストから呼び出すことができないことを意味します。
これを使用して、現在のクラス データ メンバーとメンバー関数のみにアクセスできます。 これを使用して、親クラスのデータ メンバーとメンバー関数にアクセスできます。

this() コンストラクターと super() コンストラクターの違い

これ() 素晴らしい()
this() コンストラクターは、現在のクラス オブジェクトを参照します。 super() コンストラクターは、直接の親クラス オブジェクトを参照します。
現在のクラスメソッドを呼び出すために使用されます。 親クラスのメソッドを呼び出すために使用されます。
パラメーター化されたコンストラクター内のどこでも使用できます。 これは常に子クラスのコンストラクターの最初の行になります。
これは、オーバーライドされたメソッドのスーパークラス バージョンを呼び出すために使用されます。 これは、オーバーライドされたメソッドのスーパークラス バージョンを呼び出すために使用されます。