Thắc mắc về từ khóa instanceof trong Java

E chào mọi người, em cần sự trợ giúp giải đáp thắc mắc khi sử dụng từ khóa: instanceof trong Java ạ.
E có tạo 2 lớp: Class DogClass Triangle
Đối với cụm lệnh đầu tiên thì câu lệnh kiểm tra lại bị lỗi biên dịch:
Dog d = new Dog();
Triangle t = new Triangle();
System.out.println(d instanceof Triangle); //lỗi biên dịch (Compilation Error)
Đối với cụm lệnh thứ hai thì lại không xảy ra lỗi biên dịch và khi chạy sẽ có kết quả là false
Object obj1 = new Dog();
Object obj2 = new Triangle();
System.out.println(obj1 instanceof Triangle); //trả về kết quả là false khi chạy

Em thắc mắc là tại sao câu lệnh đầu tiên nó lại thông báo lỗi biên dịch và không cho chạy. Trong khi đó cụm lệnh thứ hai rõ ràng khi kiểm tra đối tượng obj1 cũng không phải là thể hiện của Class Triangle mà nó lại không báo lỗi biên dich mà chạy được ra kết quả là false. Mong mọi người có thể giải thích giúp em. Cảm ơn mn rất nhìu !!!

Ở ví dụ đầu tiên không có cách nào để biến Dog d thành kiểu dữ liệu lớp Triangle được (biến d chỉ nhận lớp/lớp con của Dog).

Còn ở ví dụ thứ hai thì có thể bởi vì biến Object obj1 chỉ mang kiểu dữ liệu lớp Object là lớp cha của cả hai lớp DogTriangle nên sẽ không bị lỗi khi biên dịch vì hoàn toàn có thể ép sang kiểu kia được.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?