Это не разрешено в Java:Динамическое связывание частных методов: Java против C++
class A {
public void method() {}
}
class B extends A {
private void method() {}
}
Он генерирует ошибку компиляции:
error: method() in B cannot override method() in A
attempting to assign weaker access privileges; was public
Однако это разрешено в C++:
class A {
public:
virtual void method() {}
};
class B : public A {
private:
void method() {}
};
int main(void) {
A* obj = new B();
obj->method(); // B::method is invoked, despite it being private
}
Какова логика этого поведения на C++?
Java оптимизирован для использования на 90%. C++ оптимизируется для 10%. – Mehrdad
Java более ручная. Это сдерживает вас больше, чем C++, в надежде, что большинство «нормальных» программ соответствуют ограничениям и, таким образом, дает вам меньше возможностей для совершения ошибок. –
С ++ и Java - разные языки для разных целей. – Leonidos