2016-09-21 9 views
0

親クラスのメソッドを呼び出すための条約/実践:次のようにクラスB、法3の実装ではのJava:次のコードについて

`

Class A 
{ 
method1(); 
method2(); 
} 

Class B extends A 
{ 
method1(); 
method3(); 
}` 

は次のとおりです。

method3() 
{ 
this.method1(); // For calling method1 in class B 
super.method1(); // For calling method1 in parent class A 

// Following statements call method 2 in parent class 
method2();  // 1 doesn't seem to be right practice 
this.method2; // 2 is more readable in case method2 is overridden in this class 
super.method2();// 3 improves readability IMO 
} 

3のmethod2を呼び出すことをお勧めしますか?

+2

super.method()を呼び出すことは非常にまれです。特に、そのメソッドのオーバーライドから呼び出されない場合は、非常にまれです。誰もそれを期待しないので、ただそれを避けるのが最善です。メソッド呼び出しに 'this.'を追加するのは余計な情報です。 –

+1

クラスBの中でメソッド2()をオーバーライドした場合にのみ、super.method()を使用します。 –

+0

コードがコンパイルされ、興味があったときに1と2の両方が "this.method2()"になることを理解します。どちらが好ましいかを知ることができます。 method1()の場合、 "this.method1()"を "method1()"よりも優先して呼び出す方がよいと言った記事を見ました。 –

答えて

0

TL; DR:メソッドを呼び出すことthis.を使用

は無用です。無限再帰を避けるには、super.を使用してメソッドを呼び出す必要があります。

呼び出しメソッドの場合、this.foo()foo()の両方が同じことを行います。特定のメソッドの最も派生したバージョンを呼び出します。 (メンバ変数にアクセスするために、物事は異なります)。 Java AFAIKではメソッドのこのクラスのバージョンを呼び出す方法はありません。

superは、通常、メソッドのオーバーライドのコンテキストで、メソッドの基本クラスの実装を呼び出すために使用されます。 super.を省略すると、メソッド自体が呼び出され、潜在的に無限の再帰を伴う可能性があります。他のコンテキストでsuper.method()を使用している場合は、おそらくクラス階層を混乱させるでしょう。

関連する問題