我正在用java编程。 假设我有一个“MyInterface”接口和一个“MyClass”抽象类。
我想确保实现“MyInterface”接口的每个类都继承自“MyClass”。 来自MyClass的继承类完全不能实现“MyInterface”接口。
这可能吗?谢谢。 对不起,如果我的英语不好,但我是法国人。
答案 0 :(得分:2)
我想确保每一堂课 实施“MyInterface” interface继承自“MyClass”。
不。那是不可能的。接口的重点在于使得来自不同继承层次结构的类可以实现对预定义功能集的支持。
答案 1 :(得分:1)
AFAIK,你不能直接这样做。
泛型让你说这样的话,如果它有帮助:
public <T extends MyClass & MyInterface> void foo(T param) { /**/ }
因此,您只能使用MyClass和MyInterface参数调用foo()。
或者,为什么不有两个抽象基类?
abstract class MyClass { /* stuff here */ }
abstract class MyInterfaceClass extends MyClass { /* empty */ }
然后,使用MyInterfaceClass而不是MyInterface。
或者,如果您只关心容器,请自行编写:
static class MyList extends ArrayList<MyInterface> {
@Deprecated
public boolean add(MyInterface obj) {
assert obj instanceof MyClass;
return super.add(obj);
}
public <T extends MyClass & MyInterface> boolean add(T obj) {
return super.add(obj);
}
}
然后,每当您犯错时,您都会收到弃用警告。
但我的问题仍然存在 - 你想解决什么问题?您可以使用更多描述性名称而不是“类”和“接口”吗?也许正确的解决方案是完全不同的......
答案 2 :(得分:0)
不,这是不可能的。任何类都可以实现MyInterface
。无法将实现者限制为MyClass
的子类。
如果您真的需要这样的限制,我认为您将不得不使用界面,而是使用MyClass
代替界面。