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 !
Override in hierarchy OOP
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
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
7 Likes