Trong OOP (Object Oriented Programming), overriding và overloading là 2 kỹ thuật giúp tạo nên Tính đa hình (Polymorphism), một trong những sức mạnh của lập trình hướng đối tượng. Trước hết ở bài viết này chúng ta sẽ tìm hiểu về kỹ thuật overriding:
1. Override là gì?
– Override(ghi đè): được sử dụng khi bạn muốn thay đổi hành vi(behavior) của một phương thức(method) ở lớp cha(base class) trong lớp con(derived class).
– Nôm na là: giả sử có một phương thức trong lớp cha khi chạy nó sẽ output ra kết quả là A, nhưng theo một logic nào đó, bạn muốn khi chạy phương thức này ở lớp con sẽ output ra kết quả là B. Khi đó bạn dùng đến từ khóa override.
2. Đặc điểm của override
– Override chỉ xảy ra giữa các lớp có quan hệ kế thừa.
– Phương thức được override (ở lớp cha) và phương thức override (ở lớp con) phải giống hệt nhau ở cả 3 phần: kiểu dữ liệu trả về, tên phương thức và danh sách tham số.
– Chỉ có thể override các phương thức có quyền truy cập(access modifier) là public hoặc protected. Và nó không thể thay đổi được access modifier của method mà nó override (method được override và method override phải cùng access modifier).
– Từ khóa override được sử dụng để implement một inherited method, property, indexer hoặc event khi nó được dùng kèm với từ khóa abstract hoặc virtual.
– Không thể override một static method, hoặc non-virtual method.
– Không thể sử dụng các modifiers như new, static, virtual cho override method.
– Không thể override constructor.
3. Minh họa cách sử dụng
– Ví dụ bạn có một lớp động vật Animal, có phương thức là Speak() như sau:
{
public virtual void Speak()
{
Console.WriteLine( "Tiếng kêu động vật!!!" );
}
}
[/code]
– Bây giờ, bạn có một con pet cụ thể chẳng hạn như là Dog kế thừa từ lớp động vật Animal, với tiếng kêu cụ thể là Go go thì lúc này sẽ override lại method Speak() của lớp cha:
{
public override void Speak()
{
Console.WriteLine( "Go go." );
}
}
[/code]
– Và, bạn có một con pet khác là Cat cũng kế thừa từ lớp động vật Animal, nhưng không override lại method Speak() của lớp cha:
{
}
[/code]
– Lúc này, nếu bạn khởi tạo 2 đối tượng dog và cat thực hiện in ra tiếng kêu của mỗi con:
Animal cat = new Cat();
dog.Speak();
cat.Speak();
[/code]
– Thì chúng ta sẽ được kết quả là:
Go go. Tiếng kêu động vật!!!
– Như vậy, các bạn có thể thấy con dog “ghi đè” lên hành động tiếng kêu của động vật thì sẽ được tiếng kêu của nó. Còn con cat không làm gì thì tiếng kêu của nó sẽ là tiếng kêu chung chung của lớp cha nó.
[…] thể override, nhưng không thể […]
[…] OOP (Object Oriented Programming), overriding và overloading là 2 kỹ thuật giúp tạo nên Tính đa hình (Polymorphism), một trong […]