Hỏi về kết quả của đoạn code có sử dụng biến static

nhờ các bác giải thích giúp e sao kết quả bài này nó lại ra kết quả là 1 vậy ạ

Instance a mặc dù được gán bằng new B() nhưng nó có kiểu dữ liệu là A nên ưu tiên gọi inc() của class A . count đặt static chắc để đánh lạc hướng :frowning:

1 Like

do inc() bạn override ko đúng
class A bạn để access modifier cho inc() là package, mà class B khác package, không có scope của A inc() nên không override được.

You cannot override a private method


a có data type là reference parent, tới thời điểm runtime mới có object type cụ thể là B.
này là cách compiler hoạt động dựa trên concept đa hình, những gì thuộc về class con chỉ có thể biết tại thời điểm runtime (thời điểm nó ra đời) chứ không phải ở compile time. Compiler chỉ đảm bảo những gì ở class cha sẽ có sẵn để kế thừa
nên là ở đây, chỉ có inc() ở class cha available (hoặc override method ở class con)

10 Likes

kết quả bài này ra bằng 1 đó bro mà không biết phải giải thích sao á

v cái này chỉ thực hiện được trong cái package A thôi hả bro ngoài packake không đc hả , v mà tui tưởng do cái protected k cho khai báo khác package

protected là nên đặt trước inc() ở class A ý, ở đây là B kế thừa A mà

Muốn override thì nên để @Override vào, là tự biết , vừa rõ ràng vừa biết có override được hay không.
Viết như em người khác đọc code chỉ hiểu là hai method hoàn toàn khác nhau thôi.

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