Đoạn mã sau có lỗi biên dịch KHÔNG? Nêu KHÔNG thì in ra màn hình
kết quả nào?
class Student {
String sayHello() {
return "Student";
}
}
public class Man extends Student {
protected String sayHello() {
return "man";
}
public static void main(String[] args) {
Student s = new Man();
System.out.println(s.sayHello());
}
}
kết quả nào?
class Student {
String sayHello() {
return "Student";
}
}
public class Man extends Student {
protected String sayHello() {
return "man";
}
public static void main(String[] args) {
Student s = new Man();
System.out.println(s.sayHello());
}
}
Trả lời:
Đáp án đúng: A
Đoạn code này có một lỗi biên dịch. Trong Java, khi một lớp con (Man) ghi đè (override) một phương thức từ lớp cha (Student), phương thức ghi đè không được phép có mức độ truy cập (access modifier) hạn chế hơn so với phương thức ở lớp cha. Trong trường hợp này, phương thức `sayHello()` ở lớp `Student` có mức độ truy cập mặc định (package-private nếu không có modifier nào được chỉ định, nhưng ở đây ta có thể xem như là public vì lớp Man cùng package), trong khi phương thức `sayHello()` ở lớp `Man` lại có mức độ truy cập `protected`. Vì `protected` hạn chế hơn so với `public`, nên trình biên dịch sẽ báo lỗi.
Nếu sửa lỗi bằng cách đổi `protected` thành `public` trong lớp `Man`, chương trình sẽ chạy như sau:
1. `Student s = new Man();` Tạo một đối tượng `Man` và gán nó cho một biến kiểu `Student`. Đây là tính đa hình (polymorphism) trong Java.
2. `s.sayHello()`: Gọi phương thức `sayHello()` trên đối tượng `s`. Vì `s` thực sự là một đối tượng `Man`, phương thức `sayHello()` của lớp `Man` sẽ được gọi (ghi đè phương thức của lớp `Student`).
3. Phương thức `sayHello()` của lớp `Man` trả về chuỗi "man".
4. `System.out.println(s.sayHello());` In chuỗi "man" ra màn hình.
Vì câu hỏi yêu cầu xác định có lỗi biên dịch hay không, và nếu không thì in ra kết quả nào, ta kết luận có lỗi biên dịch.
Câu hỏi liên quan

FORM.08: Bộ 130+ Biểu Mẫu Thống Kê Trong Doanh Nghiệp

FORM.07: Bộ 125+ Biểu Mẫu Báo Cáo Trong Doanh Nghiệp

FORM.06: Bộ 320+ Biểu Mẫu Hành Chính Thông Dụng

FORM.05: Bộ 330+ Biểu Mẫu Thuế - Kê Khai Thuế Mới Nhất

FORM.04: Bộ 240+ Biểu Mẫu Chứng Từ Kế Toán Thông Dụng
