JavaScript is required

Đoạn mã sau có lỗi biên dịch nào?
class Student {
public int getAge() {
return 10;
}
}
public class Man extends Student {
protected int getAge(int added) {
return super.getAge() + added;
}
}

A.
Không có lỗi biên dịch.
B.
Có lỗi biên dịch: getAge() has in Man can not have weaker same access modifier than in Student.
C.
Có lỗi biên dịch:call to super, must be the first in constructor in class Man.
D.
Có lỗi biên dịch: getAge() in Student and Man can not have the same access arguments.
Trả lời:

Đáp án đúng: A


Đoạn mã có lỗi biên dịch do phương thức `getAge(int added)` trong lớp `Man` có phạm vi truy cập `protected` và nạp chồng (overload) phương thức `getAge()` (không tham số) từ lớp `Student` có phạm vi truy cập `public`. Trong Java, khi ghi đè hoặc nạp chồng một phương thức, phạm vi truy cập của phương thức con (trong trường hợp này là `getAge(int added)` trong `Man`) không được thu hẹp so với phương thức cha (trong trường hợp này là `getAge()` trong `Student`). Vì `protected` hẹp hơn `public`, trình biên dịch sẽ báo lỗi. Các đáp án khác không chính xác vì: - A sai vì có lỗi biên dịch. - C sai vì lỗi không liên quan đến việc gọi `super()` trong constructor. - D sai vì lỗi không phải do đối số truy cập mà do phạm vi truy cập khác nhau giữa lớp cha và lớp con khi overload phương thức.

Câu hỏi liên quan