Điều kỳ lạ xảy ra trong Java khi bạn sử dụng lớp trừu tượng để thực hiện giao diện: một số phương thức của giao diện có thể bị mất hoàn toàn (nghĩa là không khai báo trừu tượng hoặc triển khai thực tế), nhưng trình biên dịch không phàn nàn.Tại sao một lớp trừu tượng thực hiện một giao diện có thể bỏ lỡ việc khai báo/thực hiện một trong các phương thức của giao diện?
Ví dụ, với giao diện:
public interface IAnything {
void m1();
void m2();
void m3();
}
lớp trừu tượng sau đây được vui vẻ biên soạn mà không có một cảnh báo hoặc một lỗi:
public abstract class AbstractThing implements IAnything {
public void m1() {}
public void m3() {}
}
bạn có thể giải thích tại sao?
Không thể tạo đối tượng của lớp trừu tượng. Vì vậy, miễn là một thực hiện không được cung cấp cho một lớp trừu tượng, các đối tượng không thể được tạo ra cho IAnything. Vì vậy, điều này là hoàn toàn tốt cho trình biên dịch. Trình biên dịch mong rằng, bất kỳ lớp không trừu tượng nào triển khai thực hiện IAnything đều phải thực hiện tất cả các phương thức được khai báo trong IAnything. Và vì người ta phải mở rộng và triển khai AbstractThing để có thể tạo ra các đối tượng, trình biên dịch sẽ ném một lỗi, nếu việc triển khai đó không thực hiện các phương thức của IAnything được AbstractThing bỏ ra. – VanagaS
CHÚNG TÔI CÓ THỂ GỌI R THNG "Mẫu thiết kế bộ điều hợp" không? nếu chúng ta giữ m1, m2, m3 cơ thể trống trong lớp trừu tượng. thì MyMainClass mở rộng lớp trừu tượng đó và tôi sẽ tự do ghi đè bất kỳ phương thức nào tôi muốn, Không bắt buộc phải ghi đè tất cả các phương thức. Vui lòng thông báo !! –