2016-09-06 8 views
0

私はスマートデバイスの世界をシミュレートしたいと思います。私の計画は、このような階層を作ることでした。特定の型を受け入れるメソッドを実装するためにサブクラスを適用する方法

スマートデバイスがメインインターフェイスです。 スマートデバイスを実装するクラスとして電話と監視。携帯電話を拡張するクラスとして とサムスンとアップル。

最後に、Osという名前のスーパークラスを拡張するiosとandroidという2つのクラスがあります。

私は、SmartDeviceを実装するすべてのデバイス(時計など)にOSのインストールを強制する一方で、appleとsamsungにそれぞれのOsをインストールするようにしたいと考えています。

私はインターフェイスにistallOs(Osテスト)というメソッドを作成しましたが、問題は私がそれがsamsungかappleかどうかわからないので電話レベルでそのメソッドを実装できないことです。

私の階層構造はこの問題には適していないと推測しており、installOsをより低いレベルに移行する必要があります。

この問題の解決方法を教えてください。有界型と、ソリューションに大きなサンプルを含めることができます。

public interface SmartDevice<T extends Os> { 

    public Boolean installOs(T os); 
} 

public abstract class Phone implements SmartDevice<T extends Os>{ 

@Override 
public Boolean installOs(T t) { 
    //Cant implement it here since I dont know what device i am dealing with 
} 
} 

public class ApplePhone extends Phone<ios> { 

@Override 
public Boolean installOs(ios os) { 
    //this is an Apple phone so its ok to install ios in it. 

    System.out.println("Installing Os: "+os.getName()); 
    return true; 
} 
} 
+0

「電話」の具体的なメソッドとして 'installOs'を実装しようとしているようです。なぜ抽象的なままにしないのですか? –

+0

'Phone'を' T'でパラメタ化することもできます: 'class Phone はSmartDeviceを実装します {...}' –

+0

OSはおそらくグローバルに等しいはずなので、シングルトンとして使うことを考えてください。そのシングルトン(eq:a Set )から特定のOSをSmartDeviceにコピーします。 –

答えて

0

私は、私のインターフェイスに抽象メソッドを置くことができたことを知りました!

ので、私はすべてに沿って必要なすべてが

public interface SmartDevice<T extends Os> { 
    public abstract Boolean installOs(T os); 
} 

その後、私は携帯電話のクラスに行って、これに限定された種類を変更しました:

public abstract class Phone<A extends Os> implements SmartDevice<A>{ 

@Override 
public abstract Boolean installOs(A s) ; 

} 

はあなたの助けみんなありがとう。

関連する問題