Override in hierarchy OOP

72983753_626843381181111_366636404299530240_n

Hi there ! ảnh này mình vô tình thấy trên mạng, theo mình thì 2 class trên chẳng có gì sai ( cả cú pháp lẫn logic ) nếu tạo đối tượng từ lớp con và gọi method sayGoodbye() thì nó sẽ lấy phương thức sayGoodbye() từ lớp con. có khi nào ý của đề là sayGoodbye() của lớp con thiếu super.sayGoodbye(); ? Mọi người cho mình xin ý kiến với !

3 Likes
  • thiếu annotation @Override

  • nếu mục đích của bạn là ghi đè hành vi sayGoobye() mà bạn không dùng @Override để đánh dấu thì complier sẽ không bắn ra lỗi nếu vô tình bạn có sai sót tên hàm. Ví dụ bạn ghi nhầm là sayGoogby() chẳng hạn, nếu bạn dùng annotation thì ide sẽ báo rằng super không có hàm này.

6 Likes

mình tưởng cái đó như comment không có tác dụng gì :v

3 Likes

@anon21816065 mình bổ sung cmt bạn checkout nhé

1 Like

Không biết OOP của Java và C# có khác nhau hay không nhưng đối với C# thì trường hợp trên gọi là Hide, không có gì sai hết. Hide thì không có benefit từ đa hình, override thì có.

Override (benefit từ đa hình)

Msg msg = new Msg();
msg.sayGoodbye(); // "Goodbye" của lớp Msg

msg = new TestMsg();
msg.sayGoodbye(); // "Goodbye Java" của lớp con TestMsg

Hide (không có benefit từ đa hình)

Msg msg = new Msg();
msg.sayGoodbye(); // "Goodbye" của lớp Msg

msg = new TestMsg();
msg.sayGoodbye(); // vẫn là "Goodbye" của lớp Msg
6 Likes

Thiếu dấu } của TextMsg nha :penguin:

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