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 đó.

X.java
package viduoverloading;

public class X {
	
	void calculate(int a, int b) {
		System.out.println("Đây là lớp X.");
	}
    
}

Y.java
package viduoverloading;

public class Y extends X {

	@Override
	void calculate(int a, int b) {
		System.out.println("Đây là lớp Y.");
	}

}

Z.java
package viduoverloading;

public class Z extends Y {

	@Override
	void calculate(int a, int b) {
		System.out.println("Đây là lớp Z.");
	}

}

MainClass.java
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:

Nguồn: freetuts.net