1. Câu hỏi
2. Phân tích
Đây là 1 câu hỏi không quá khó nhưng rất dễ làm sai nếu không hiểu rõ bản chất của tính kế thừa và ép dữ liệu (cast).
Syntax code
Class A and B khai báo public trong package com.udayan.oca. Method print() của A được overridden bởi B chính xác. Method print() cũng là public không có lỗi trong quá trình compile.
Phân code trong hàm main
Let's check the code inside main method.
A obj1 = new A();
=> Tạo Object obj1 của class A.
B obj2 = (B)obj1;
=> Object obj1 là 1 instance của class A, vậy lúc runtime obj2 sẽ tham chiếu đến đối tượng class A. Vì class con (sub type) không được tham chiếu đến Object của class cha (super). Nên sẽ xảy ra lỗi ClassCastException lúc runtime.
Để dễ hiểu hơn ta có thể hình dung bài toán cụ thể: Ví dụ class B (sub-class) có thêm 1 số thuộc tính và method mà class A (super) không có. Khi gán B obj2 = (B)obj1; lúc đó obj2 sẽ có quyền theo tác với các thuộc tính này, nhưng vì class A không có nên nó sẽ không biết để thao tác.
Đáp án:
3. Kết luận
Bạn có thể gõ code vào IDE để chạy lại và kiểm tra Source cho câu hỏi