Java - Hãy đưa ra kết luận đoạn chương trình cho sẵn có chạy được hay không và giải thích.
Hãy đưa ra kết luận đoạn chương trình cho sẵn dưới đây có chạy được hay không và giải thích. Sau đó sử dụng Eclipse để kiểm tra kết quả của đoạn chương trình đó.
package viduoverloading; public class X { void calculate(int a, int b) { System.out.println("Đây là lớp X."); } }
package viduoverloading; public class Y extends X { @Override void calculate(int a, int b) { System.out.println("Đây là lớp Y."); } }
package viduoverloading; public class Z extends Y { @Override void calculate(int a, int b) { System.out.println("Đây là lớp Z."); } }
package viduoverloading; public class MainClass { public static void main(String[] args) { X x = new Y(); x.calculate(10, 20); Y y = (Y) x; y.calculate(50, 100); Z z = (Z) y; z.calculate(100, 200); } }
Bài giải
-------------------- ######## --------------------
Trong đoạn chương trình trên, chúng ta thấy trình biên dịch không hề báo lỗi trong quá trình chúng ta code nhưng khi chúng ta thực thi chương trình thì sẽ có lỗi xảy ra ở dòng code: Z z = (Z) y;
trong lớp MainClass
. Lỗi này là do khi chúng ta tiến hành ép kiểu tường minh từ y
về z
thì lúc này trình biên dịch vẫn thấy có lý vì chúng có quan hệ cha con. Nhưng khi thực thi thì y
vốn dĩ không biết z
là gì nên không thể thực hiện việc ép kiểu được.
Kết quả biên dịch chương trình sử dụng Eclipse sẽ minh họa điều này:
Câu hỏi thường gặp liên quan:
- Java - Liệt kê sự khác nhau giữa overriding và overloading.
- Java - Liệt kê những trường hợp không phải nạp chồng phương thức.
- Java - Chúng ta có thể nạp chồng phương thức main() được không?
- Java - Hãy đưa ra kết quả sau khi biên dịch đoạn chương trình cho sẵn.
- Java - Hãy đưa ra kết luận đoạn chương trình cho sẵn có chạy được hay không và giải thích.