我注意到在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
选择更邪恶的方式?
为什么Java
和C++
表现不同?仅仅是因为Java
和C++
之间的不同名称查找策略?