确定用于在子类中调用方法的超类引用

时间:2017-09-12 07:45:17

标签: java inheritance

我被问过这几次,&我完全不知道如何以及为什么会这样做。

以下是该方案:

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++等其他语言中执行此操作?

1 个答案:

答案 0 :(得分:2)

你不仅不能真正做到这一点(除了一些复杂的巫术),但正如你所说的那样,甚至没有理由去尝试这样做。

唯一可能出现这种情况的情况是,如果您意外地将相同的方法签名提供给通常使用的2个接口,并且最终可能会在同一个类中一起实现,但具有不同的功能。但这是接口上的设计错误'一部分。

周围没有干净的方式,即使是一种不洁净的方式也会如此复杂,以至于没有一个心智正常的人会尝试它。正确的做法是重构其中一个接口以使用不同的方法签名。如果这种情况已经两次,它也可能是更大设计问题的迹象。