Trong ví dụ sau:Gọi một phương pháp ghi đè từ một constructor
class Base {
int x=10;
Base() {
show();
}
void show() {
System.out.print ("Base Show " +x + " ");
}
}
class Child extends Base {
int x=20;
Child() {
show();
}
void show() {
System.out.print("Child Show " + x +" ") ;
}
public static void main(String s[ ]) {
Base obj = new Child();
}
}
- Tại sao là sản phẩm như hình dưới đây
Child Show 0 Child Show 20
- Tôi nghĩ nhà xây dựng có thể chỉ truy cập các thành viên cá thể khi nhà xây dựng siêu của nó s đã hoàn thành.
Tôi nghĩ điều đang xảy ra ở đây là nhà xây dựng siêu đang gọi phương thức show() của trẻ vì phương pháp này bị ghi đè trong Child. vì nó đã bị ghi đè nhưng tại sao giá trị của x 0 và tại sao nó có thể truy cập phương thức này trước khi hàm tạo siêu hoàn thành?
là cơ chế xử lý ảo được kích hoạt trong quá trình thi của một đối tượng? Tôi nghi ngờ nó không phải là. – Mahesh
Trong C++, điều này có thể gây ra sự cố. –
Java hiệu quả là một tài nguyên Java tuyệt vời và nó đi sâu vào chi tiết này. Từ mục 17: "*** Các nhà xây dựng không được gọi các phương thức ghi đè **, trực tiếp hoặc gián tiếp (...) Nếu phương pháp ghi đè phụ thuộc vào bất kỳ khởi tạo nào được thực hiện bởi hàm tạo lớp con, phương thức sẽ không hoạt động như mong đợi ... * "Nếu bạn có cuốn sách trên tay tôi khuyên bạn nên đọc mục này. –