扩展类的接口

时间:2016-01-02 10:29:32

标签: java

假设我有一个接口,所有实现该接口的类也扩展了某个超类。

public class SuperClass {
    public void someMethod() {...}
}

public interface MyInterface {
    void someOtherMethod();
}

//many (but not all) sub classes do this
public class SubClass extends SuperClass implements MyInterface {
    @Override
    public void someOtherMethod() {...}
}

然后,如果我正在处理MyInterface类型的对象并且我不知道特定的子类,我必须对同一个对象进行两次引用:

MyInterface someObject = ...;
SuperClass someObjectCopy = (SuperClass) someObject; //will never throw ClassCastException
someObjectCopy.someMethod();
someObject.someOtherMethod();

我尝试使接口扩展超类,但这是编译器错误:

public interface MyInterface extends SuperClass {} //compiler error

我还想过将接口和超类组合成一个抽象类,如下所示:

public abstract class NewSuperClass {
    public void someMethod();
    public abstract void someOtherMethod();
}

但是我不能拥有一个不想实现someOtherMethod()的子类。 那么有没有办法表明实现接口的每个类也扩展了某个类,或者我别无选择,只能对同一个对象进行两次引用?

1 个答案:

答案 0 :(得分:0)

我认为你唯一的解决方案就是引用两者,但这表明你在某处有设计缺陷。我之所以这么说是因为你应该把interface想象成你的实现类总是需要的东西。例如,汽车和飞机都需要Drive()接口。设计重新考虑可能值得您花时间。但是,如果您仍想遵循该路径,则可以执行以下操作:

public class ClassA {
   public void methodA(){};
}
public abstract class ClassB extends Class A{
   public void methodB();    
}

完成上述设置后,您现在可以通过执行以下操作来引用具有这两种方法的对象:

ClassB classB = new ClassB();
classB.methodA();
classB.methodB();

现在你实际上不必实际使用指向同一对象的两个指针。