2016-09-02 4 views
1

私の抽象クラスでは知らないうちに、どのサブクラスがそのコンストラクタを呼び出すかに問題があります。抽象クラスからサブクラスを参照する

abstract class A { 

    Field field; 

    public A() { 
     this.field = Manager.add(Here i would like to add the type of subclass); 
    } 
} 

私は、コンストラクタのチェーンにパラメータとして、クラス型を運ぶことができるが、別の方法がある場合、私は思っていました。
おそらく、私はStackTraceを使ってサブクラスについて調べ、その型を取得することができましたが、この方法で使うべきではないと思います。

は、あなたの答えを事前にありがとうございました:)

+4

通常、抽象クラスではこれについて知る必要はありません。タイプ固有のロジックは、サブクラスで発生する必要があります。抽象メソッドを抽象クラスで定義し、コンストラクタから呼び出すが、それをサブクラスに実装することができます。だから、あなたは何とかスーパークラスのコンストラクタの動作に影響を与えることができます。 –

+0

http://stackoverflow.com/questions/3417879/getting-the-name-of-a-sub-class-from-within-a-super-class –

+2

@JFMeier、コンストラクタから抽象メソッドを呼び出すことはお勧めできません。このメソッドは初期化されていないプロパティにアクセスできます。 – Codebender

答えて

4

this.getClass()はインスタンス化されたあなたのクラスを与えるウィル。

+0

ありがとう、それは働いた:) –

+0

スーパークラスのコンストラクタを呼び出す前に 'this.getClass()'を呼び出すことは可能ですか? –

+0

いいえ、サブクラスはベース/スーパークラスの後にインスタンス化されるためです。 –

関連する問題