[JAVA] @Overriding và tính đa hình

Khi một class kế thừa class khác qua từ khóa extend , ta hiểu nó là Class con còn class được kế thừa là class cha, và việc class con này  có thể định nghĩa lại một bản thể mới của method trong class cha được gọi là method Overriding. “Định nghĩa lại” ở đây tức là class con chỉ được thay đổi nội dung bên trong method chứ không được thay đổi 1 trong 4 yếu tố sau: return type, parameter type, số lượng parameter, thứ tự parameter. 4 yếu tố này còn được gọi là Method Signature. Method Overriding sẽ tận dụng được runtime polymorphism.

#1 Thế nào là đa hình – polymorphism?

Khái niệm “đa hình” trong lập trình hướng đối tượng có thể hiểu là mỗi đối tượng thể hiện những “hành động” khác nhau trong từng hoàn cảnh khác nhau.

#2 Runtime Polymorphism là gì ?

Runtime Polymorphism còn được biết đến với cái tên: Dynamic Method Dispatch. Khái niệm này được định nghĩa tương ứng với tình huống một method (đã được override) được gọi theo object, không phải theo reference type.

#3 Ứng dụng của runtime polymorphism?

Đầu tiên ta cần phân biệt giữa static và dynamic polymorphism.

Các biến và method đi kèm với từ khóa private, static, final sẽ sử dụng tính năng static binding được liên kết bởi compiler. Trong khi dó virtual method thì được liên kết trong quá trình runtime dựa trên runtime object.

Sử dụng @Override

Sử dụng Annotation này cho phép ta tận dụng cơ chế làm việc của compiler để đảm bảo chắc chắn ta @Override và gọi đúng method.

hoc-lap-trinh-java-web-o-dau-1

Nguyên tắc của Dynamic Polymorphism

Thay đổi Method signature

Nếu ta sử dụng tính năng Overriding, method đã qua @Override phải có cùng phần signature (4 yếu tố đã liệt kê ở đầu bài viết).

Ta vẫn có thể thay đổi một số yếu tố của method signature (thay đổi số lượng parameter, thứ tự..) nhưng hành động này là Overloading, không phải Overriding.

Return type của method

Return type của method

Co-Variant Return Type

Co-variant return nghĩa là return type của overriding method(method ở class con) có thể trở thành subtype của return type của overrided method (method ở class cha).

Static method Overriding (hoặc) Method binding

Static variable binding

Final & Private Method

Override Access Levels (mức truy nhập)

Override với method super()

@Override với Abstraction

@Override với Exceptions

@Override từ Inner Private Class

Overriding và Overloading

Multi-Level Override (Override đa cấp)

Instance vs static method override

Instance vs static variable Override

Constructor Override

Constructor với mehtod super()

Override trong cùng package và khác package

Instance method được ưa chuộng hơn Interface default method

[JAVA] @Overriding và tính đa hình
5 (100%) 10 votes

Nhận xét