Hãy cho biết kết quả khi chạy đoạn chương trình sau?
class Student {
public int getAge() {
return 10;
}
}
public class Man extends Student {
public int getAge(int added) {
return super.getAge() + added;
}
public static void main(String[] args) {
Man s = new Man();
System.out.println(s.getAge());
System.out.println(s.getAge());
}
}
class Student {
public int getAge() {
return 10;
}
}
public class Man extends Student {
public int getAge(int added) {
return super.getAge() + added;
}
public static void main(String[] args) {
Man s = new Man();
System.out.println(s.getAge());
System.out.println(s.getAge());
}
}
Trả lời:
Đáp án đúng: B
Đoạn code định nghĩa một lớp `Student` với phương thức `getAge()` trả về 10. Lớp `Man` kế thừa từ lớp `Student` và định nghĩa một phương thức `getAge(int added)` ghi đè phương thức `getAge()` của lớp cha. Phương thức `getAge(int added)` này trả về tổng của `super.getAge()` (kết quả của phương thức `getAge()` từ lớp cha, tức là 10) và `added`. Tuy nhiên, trong phương thức `main`, chúng ta tạo một đối tượng `s` của lớp `Man` và gọi phương thức `s.getAge()` hai lần. Vì lớp `Man` có một phương thức `getAge(int added)` nhưng không có phương thức `getAge()` không tham số, nên khi gọi `s.getAge()`, nó sẽ không khớp với phương thức nào trong lớp `Man`. Tuy nhiên, Java cho phép kế thừa phương thức từ lớp cha nếu lớp con không định nghĩa phương thức trùng tên (overriding). Do đó, lời gọi `s.getAge()` sẽ gọi phương thức `getAge()` từ lớp `Student`, trả về 10. Việc gọi hai lần sẽ in ra 10 hai lần.
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
