2012-03-20 13 views
7

サブクラスの中にあります。スーパークラスの名前を見つけようとしているときにsuper.getClass()を試しましたが、サブクラスのみ。 なぜですか?サブクラスのsuper.getClass()がサブクラス名を返す理由

+0

はたぶん、いくつかのコードとサンプル出力を追加してみて? – smessing

+0

[親の基本クラスオブジェクトを取得する方法super.getClass()](http://stackoverflow.com/questions/3294656/how-to-get-the-parent-base-class-object-super- getclass) – assylias

答えて

8

getClass().getSuperclass()とする必要があります。

+0

http://stackoverflow.com/questions/3294656/how-to-get-the-parent-base-class-object-super-getclassこのスレッドはあなたがBad Designを提案したので、あなたのお勧めは何ですか?それを避ける –

+0

これはシナリオによって異なります。私はあなたがそれを使用しようとしているのか分かりません – Bozho

+0

可能ならば、私はリフレクションを完全に避けることを勧めます。 –

4

スーパークラス(またはスーパークラスのスーパークラスなど)からメソッドをオーバーライドすると、super.theMethod()はオーバーラードしたメソッドではなく元のメソッドを呼び出します。実際のオーバーライドをtheMethodにしなかった場合、super.theMethod()theMethod()のように正しく動作します。

この場合、私はあなたがそう正確getClass()、すなわちなどのsuper.getClass()行為のいずれかの方法がObjectクラスのgetClassメソッドが呼び出され、(実際に私はそれが最終的なので、あなたはしなかった知っている)getClass()をオーバーライドしていなかったと仮定します。

+0

はい、私は同意しますが、そのようなデザインは、スーパークラスのメソッドを呼び出さない理由は、メソッドを呼び出すためにスーパーが言及されている場合は、 –

+4

@AbhishekChoudharyそうです。 'getClass'を呼び出すと、' Object'で定義された 'getClass'メソッドを呼び出しています。 'Object'はあなたのクラスのスーパークラスです(ダイレクトスーパークラスでない場合でも)。そのため、スーパークラスのメソッドのバージョンを呼び出しています。実際、スーパークラスのバージョンはそのメソッドの唯一のバージョンです。 – sepp2k

0

あなたは、派生クラスのオブジェクトやスーパーではないクラスを作成しているためです..あなたはこの

this.getClass().getSuperClass(); 
+2

'this.'は不要です。 –

関連する問題