Trong C++, hàm thành viên mặc định là non-virtual. Muốn đa hình thì phải khai báo virtual. Trong Java, phương thức mặc định là virtual; dùng final để ngăn ghi đè.
Ví dụ C++ (non-virtual mặc định)
#include <iostream>
using namespace std;
class Base { public: void s() { cout << "In Base\n"; } };
class Derived : public Base { public: void s() { cout << "In Derived\n"; } };
int main() {
Derived d; Base &b = d; b.s(); // Gọi Base::s() do non-virtual
return 0;
}
Kết quả C++
In Base
Ví dụ Java (virtual mặc định)
class Base { public void s() { System.out.println("In Base"); } }
class Derived extends Base { public void s() { System.out.println("In Derived"); } }
public class Main {
public static void main(String[] args) {
Base b = new Derived(); b.s(); // Gọi Derived::s() do virtual mặc định
}
}
Kết quả Java
In Derived