2011-12-28 9 views
3

スーパークラスタイプのシナリオでプロパティを正しく設定するには、少し問題があります。サブクラスのスーパークラスプロパティを設定する

私は

public class A { 
    private String name; 
    private int id; 
    ... 
} 

public class B extends A { 
    private Date time; 
    private int status; 
    ... 
} 

...さんは言わせ、クラスBがクラスAの特殊なバージョンであるような2つのクラスを持っている今、私は何をしようとしているプロパティを設定するために使用されるメソッドを使用しています結果セットからAに、代わりB.

public A setProperties(ResultSet rs) { 
    A a = new A(); 
    a.setName(rs.getString(...)); 
    ... 
    return a; 
} 

のインスタンスでそれらを設定し、私はこれからのリターンを取り、Bとしてそれをキャストしようとしているが、もちろん、すべてのAさんは、Bさんはありません...そうすることはできません。私はまた、setPropertiesメソッドに別のパラメータを追加しようとしました。これは、Aを受け取り、Aを返します。そうすることで、多態性を使用してBを取得できますが、すべての値がNULLになりました。

私はここで迷っています。どんな提言も大変ありがとうございます。

答えて

6

スーパークラスのメソッドを宣言します。サブクラスはこのメソッドをオーバーライドし、super.foo(ResultSet rs)を呼び出します。foo(...)はオーバーライドされたメソッドです。そこでは、ResultSetを解析し、オブジェクトのフィールドを設定することができます。

例 -

class Foo{ 
    void setProperties(final ResultSet rs){ 
     // do stuff 
    } 
} 

final class Bar extends Foo{ 
    @Override 
    final void setProperties(final ResultSet rs){ 
     // do stuff 
     super.setProperties(rs); 
    } 
} 

詳細については、Using the Keyword superを参照してください。

+0

私はこれを試してください。サブクラスのメソッドをオーバーライドしないと、スーパークラスのプロパティを設定することはできますか? – Shaded

+0

右。サブクラスで 'setProperties'を明示的にオーバーライドせずにサブクラスインスタンスで引き続き呼び出すと、そのプロパティはスーパークラスに設定されます。 – mre

+0

私はまだ問題があります。 'A.setProperties()'で名前を調べています。メソッドが返った後、私は 'B.setProperties()'でそれをもう一度チェックし、それはnullです。何かご意見は? – Shaded

関連する問題