2016-09-01 11 views
1

を必要とするように、私は抽象スーパークラスを持って、それを拡張する2クラスオーバーライドメソッドのパラメータは、サブクラス

public abstract class MyAbstract {} 

public class A extends MyAbstract {} 

public class B extends MyAbstract {} 

私はそのパラメータ

としてMyAbstractのサブクラスを受け取るメソッドを持っているインタフェースを持っています私はそのインターフェイス

public class AnotherClass implements MyInterface { 
    @Override 
    <T extends MyAbstract> void someMethod(T param) {} 
} 

を実装するクラスを持っている。しかし、私は唯一のアロにしたい

public interface MyInterface { 
    <T extends MyAbstract> void someMethod(T param); 
} 

この方法で使用される特定のサブクラスMyAbstract。ここで

は、私がこれまで試したもののカップルです:

<T extends A> void someMethod(T param); //doesn't override the method 

void someMethod(A param); //doesn't override the method 

はとにかくインターフェイスは、一般的なパラメータを取る必要があり、そのインターフェイスの実装者は、そのパラメータのより制限されたバージョンを指定することがありますかありますこれは単純に不可能ですか?

+1

あなたは質問は矛盾を言い表している。異なるパラメータを持つメソッドは、定義によってオーバーライドすることはできません。 – EJP

答えて

3

はい、あなたはインターフェイス自体が実際にジェネリックパラメータかかります使用どこ次に、あなたがそれを制限することができ

public interface MyInterface<T extends MyAbstract> { 
    void someMethod(T param); 
} 

を:

public class AnotherClass<T extends A> implements MyInterface<T> { 
    @Override 
    public void someMethod(T param) {} 
} 

または:

public class AnotherClass implements MyInterface<A> { 
    @Override 
    public void someMethod(A param) {} 
} 
関連する問題