为什么子类中的override方法在C ++中隐藏了超类,而在Java中却没有?

时间:2017-03-24 02:31:21

标签: java c++ inheritance override

我注意到在Java中,如果重写子类中的方法,仍然可以调用仅在超类中声明的overriden方法。但在C++中,它将被隐藏。

Java代码:

class Fish {
    public void foo() {}
}

class Tuna extends Fish {
    public void foo(int i) {}
}

public class Test{
    public static void main(String[] args) {
        Tuna t = new Tuna();
        t.foo();
        t.foo(1);
    }
}

C ++代码:

class Fish {
public:
    void foo() {}
};

class Tuna : public Fish {
public:
    void foo(int i) {}
};
int main() {
    Tuna t;
    t.foo(1); // ok
    t.foo(); // error
    return 0;
}

我注意到有些人在Why does an overridden function in the derived class hide other overloads of the base class?中提出了一些解释。如果确实如此

  名字隐藏将证明是一个较小的邪恶

,为什么Java选择更邪恶的方式?

为什么JavaC++表现不同?仅仅是因为JavaC++之间的不同名称查找策略?

0 个答案:

没有答案