【发布时间】:2011-05-07 03:13:31
【问题描述】:
我正在用 java 编程。 假设我有一个“MyInterface”接口和一个“MyClass”抽象类。
我想确保实现“MyInterface”接口的每个类都继承自“MyClass”。 从 MyClass 继承的类完全能够不实现“MyInterface”接口。
这可能吗?谢谢。 如果我的英语不好,我很抱歉,但我是法语。
【问题讨论】:
标签: java inheritance object
我正在用 java 编程。 假设我有一个“MyInterface”接口和一个“MyClass”抽象类。
我想确保实现“MyInterface”接口的每个类都继承自“MyClass”。 从 MyClass 继承的类完全能够不实现“MyInterface”接口。
这可能吗?谢谢。 如果我的英语不好,我很抱歉,但我是法语。
【问题讨论】:
标签: java inheritance object
我要确保每一堂课 实施“MyInterface” 接口继承自“MyClass”。
不。那是不可能的。接口的全部意义在于使来自不同继承层次结构的类能够实现对一组预定义功能的支持。
【讨论】:
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);
}
}
然后,只要您犯了错误,就会收到弃用警告。
但我的问题仍然存在 - 您要解决什么问题?您可以使用更具描述性的名称来代替“类”和“接口”吗?也许正确的解决方案是完全不同的。
【讨论】:
不,这是不可能的。任何类都可以实现MyInterface。没有办法将实现者限制为 MyClass 的子类。
如果您真的需要这样的限制,我认为您将不得不不使用接口而是使用MyClass 代替接口。
【讨论】: