Khai báo nào sau đây sẽ không gây ra lỗi biên dịch?
Trả lời:
Đáp án đúng: D
Đáp án đúng là B. native MyMethod();
Giải thích:
* **A. abstract int i;**: Khai báo biến `i` là `abstract` là không hợp lệ. `abstract` chỉ được dùng cho class và method, không dùng cho biến.
* **B. native MyMethod();**: Khai báo phương thức `native` là hợp lệ. `native` được sử dụng để khai báo một phương thức được triển khai bằng ngôn ngữ khác (ví dụ: C, C++). Nó không có phần thân (body) và kết thúc bằng dấu chấm phẩy (;).
* **C. default class MyClass {};**: `default` không phải là một từ khóa hợp lệ để khai báo một class. `default` chỉ có thể được sử dụng trong switch case hoặc trong interface để định nghĩa implementation mặc định cho một method.
* **D. abstract final class MyClass {};**: Một class không thể vừa là `abstract` vừa là `final`. `abstract` có nghĩa là class này phải được kế thừa (inherited) và các phương thức `abstract` của nó phải được implement bởi lớp con. `final` có nghĩa là class này không thể được kế thừa. Do đó, hai modifier này mâu thuẫn nhau.
Vì vậy, chỉ có khai báo `native MyMethod();` là không gây ra lỗi biên dịch.





