我被问过这几次,&我完全不知道如何以及为什么会这样做。
以下是该方案:
interface IntA {
void someMethod();
}
interface IntB {
void someMethod();
}
两个简单的界面;在下面的简单类中实现
class ClassAB implements IntA,IntB {
@Override
public void someMethod(){
//some logic
}
}
然后我们可以实例化&像这样使用:
IntA a = new ClassAB();
a.someMethod();
或通过其他界面:
IntB b = new ClassAB();
b.someMethod();
现在问题在于someMethod()
的实现,我是否可以了解他们是否使用了IntA
引用或IntB
引用来调用someMethod()
。因此,执行不同的逻辑。
老实说,我觉得这是一个错误的问题。我不明白为什么&如何做到这一点。从接口的角度来看,它具有满足功能签名和标准的实现。这一切都很重要。如果IntA
& IntB
期望得到不同的结果,然后它们应该在两个不同的类中实现。
我曾两次遇到这种情况,因此我问的原因。真的有办法确定吗?有没有办法在C/C++
等其他语言中执行此操作?
答案 0 :(得分:2)
你不仅不能真正做到这一点(除了一些复杂的巫术),但正如你所说的那样,甚至没有理由去尝试这样做。
唯一可能出现这种情况的情况是,如果您意外地将相同的方法签名提供给通常使用的2个接口,并且最终可能会在同一个类中一起实现,但具有不同的功能。但这是接口上的设计错误'一部分。
周围没有干净的方式,即使是一种不洁净的方式也会如此复杂,以至于没有一个心智正常的人会尝试它。正确的做法是重构其中一个接口以使用不同的方法签名。如果这种情况已经两次,它也可能是更大设计问题的迹象。