2012-02-21 16 views
2
public abstract class SoftwareComponent { 

    private Set<Information> generateInfo = new HashSet<Information>(); 
    private Set<Information> consumeInfo = new HashSet<Information>(); 
    public Set<Infomation> getGeneratedInfo() { ... } 
    public Set<Information> getConsumedInfo() {....} 
} 

public class SensorDriver extends SoftwareComponent { 

} 

public class Information { ... } 

public class SensorMeasurement extends Information { } 

public class command extends Information {  } 

上記のコードは私のプログラムの構造です。ここで、センサドライバはすべて の親クラスメソッドを継承しています。センサードライバでオーバーライドされたメソッドの範囲を制限したい。Java継承でオーバーライドされたメソッドのスコープを制限する

制限は "センサードライバ"は "センサー測定"情報のみを生成できます。 "センサードライバ"は "コマンド"情報を消費できません。

+4

できません。それは継承という概念を破ります。基本クラスができることは何でも、あなたのサブクラスは名誉を必要とします。 –

+0

私はこの質問を理解できません。おそらく言い回しを変えることはできますか? – Jivings

+0

私の質問に言い換えると、 "Javaのサブクラスでオーバーライドされたメソッドの範囲を制限する方法はありますか?" – Pankesh

答えて

2

あなたのソフトウェアコンポーネントは、一般的な作りと情報パラメータ加えることができます。

public abstract class SoftwareComponent<I extends Information> { 

    private Set<I> generateInfo = new HashSet<I>(); 
    private Set<I> consumeInfo = new HashSet<I>(); 
    public Set<I> getGeneratedInfo() { ... } 
    public Set<I> getConsumedInfo() {....} 
} 

public class SensorDriver extends SoftwareComponent<SensorMeasurement> { 
} 
+0

ありがとうOzan、あなたのソリューションは私のコードで完全に動作します。 – Pankesh

+0

@PankeshPatel:あなたは大歓迎です、もしあなたがとても親切で、私の答えを受け入れることができたら? – Ozan

+0

申し訳ありませんが、私はstackoverflow(ちょうど2日古い)の新しいです。私には3つの評判があります。これらの数の評判で、私はマークすることはできません。私はそれを本当に残念です。 :) – Pankesh

0

あなたは答えとして単一継承を見ている任意の時間を、あなたが問題に実行することができます。私はあなたが実際に複数の継承(インターフェイスの形で)を使用したいと思います。特定のアクションを実行するためのインタフェースを宣言したり、論理クラスをまとめてグループ化するインタフェースを実装する抽象クラスを使用することを検討する必要があります。

BがAならAのすべてを継承しますが、BがA、X、Y、Z以外の場合はUnsupportedOperationExceptionをスローすることができますしかし、実際に階層を少しだけ再構築することを検討して、すべてが理にかなっているはずです。

関連する問題