+1

Java SE 8 Oracle Certified Associate 1Z0-808 - #9

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.

Tham khảo thêm

Đáp án:

image.png

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


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí