假设我有一个接口,所有实现该接口的类也扩展了某个超类。
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()
的子类。
那么有没有办法表明实现接口的每个类也扩展了某个类,或者我别无选择,只能对同一个对象进行两次引用?
答案 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();
现在你实际上不必实际使用指向同一对象的两个指针。