本主题的目的不是要问如何实现两个具有相同方法名称的接口。我在问自己为什么我们不能让抽象或虚拟成为方法的显式实现。这里有一个简单的:
AbstractClass 是一个抽象类,它实现:
IFlexibility1
通过声明Method()
为抽象。IFlexibility2
通过声明Method2()
为虚拟。
ConcreteClass 是一个 AbstractClass 并实现 Method() 和Method2()
. 没关系 !
现在,假设IFlexibility1
和IFlexibility
接口提供具有相同签名的方法 void Method()
。如果我们想要做两个不同的实现,我们必须在 AbstractClass 中使用显式的实现规则:
// Two explicit privates methods
void IFlexibility1.Method()
{
}
void IFlexibility2.Method()
{
}
这是我的问题:为什么不能像第一种情况那样让子类实现这些方法。事实上,我们不能声明一个虚拟的 void IFlexibility1.Method()或一个抽象的 void IFlexibility2.Method(),这是逻辑,因为这些方法是私有的。但我认为以下语法可能是正确的protected abstract void IFlexibility1.Method()。你怎么看 ?
我很好,这不是 21 世纪的问题。此外,我们通常不会实现与这种情况相匹配的两个接口。由于这些原因,Java 没有提供显式实现。