Bài 12: Inheritance – Sự Kế Thừa

0
196

Xin chào các bạn tôi là Andy. Hôm nay chúng ta sẽ bước tiếp bài tiếp theo của chương trình C#. Tìm hiểu về Sự Kế Thừa trong C#

Có 2 kiểu kế thừa trong lập trình hướng đối tượng là đơn kế thừa (kế thừa từ nhiều lớp) và đa kế thừa (kế thừa từ nhiều lớp). C# chỉ cung cấp mô hình đơn kế thừa.

Ví dụ về kế thừa trong C#.

/* Ví dụ về thừa kế trong lậ trình C# */ usingSystem; usingSystem.Collections.Generic; usingSystem.Text; namespace_OOPInheritance { class Program { static voidMain(string[] args) { DogobjDog = new Dog(4); objDog.displayProperties(); ChickenobjChicken = new Chicken(2); objChicken.displayProperties(); Console.Read(); } } class Animal { protected intifoots; protected stringsName; protected voidsetFoot(intival) { ifoots = ival; } protected voidsetName(stringsVal) { sName = sVal; } public voiddisplayProperties() { Console.WriteLine(sName + have + ifoots.ToString()+ foots); } } class Dog: Animal { publicDog(intival) { setName(Dog); ifoots = ival; } } class Chicken: Animal { publicChicken(intival) { setName(Chicken); setFoot(ival); } } }

Kết quả khi thực thi chương trình

interface_1

Ở ví dụ trên, Dog và Chicken là hai lớp kế thừa từ lớp Animal, do đó các thuộc tính như số chân, ifoots và tên sName đương nhiên xuất hiện trong hai lớp này và cho phép sử dụng. Tương tự, các hàm như setName(), setFoot(), displayProperties() tại lớp Animal cũng được kế thừa xuống hai lớp Dog và Chicken. Do đó ta có thể gọi những hàm này, và kết quả hiển thị khi gọi hàm displayProperties() theo đối tượng objDog và objChicken khác nhau như hình trên.
Một lưu ý trong thừa kế đấy là Overriding method. Nếu một hàm được định nghĩa trong lớp con có cùng tên, kiểu với hàm trong lớp cha, khi ấy hàm trong lớp con sẽ overrides (làm ẩn) hàm trong lớp cha. Đó được gọi là overriding.
Ví dụ về Overriding:

/* Ví dụ về thừa kế,overrding trong lập trình C# */ usingSystem; usingSystem.Collections.Generic; usingSystem.Text; namespace_OOPInheritance { class Program { static voidMain(string[] args) { DogobjDog = new Dog(4); objDog.displayProperties(); ChickenobjChicken = new Chicken(2); objChicken.displayProperties(); TigerobjTiger = new Tiger(4); objTiger.displayProperties(); Console.Read(); } } class Animal { protected intifoots; protected stringsName; protected voidsetFoot(intival) { ifoots = ival; } protected voidsetName(stringsVal) { sName = sVal; } public virtual voiddisplayProperties() // chú ý hàm này { Console.WriteLine(sName + has + ifoots.ToString()+ foots); } } class Dog: Animal { publicDog(intival) { setName(Dog); ifoots = ival; } } class Chicken: Animal { publicChicken(intival) { setName(Chicken); setFoot(ival); } public voiddisplayProperties() { base.displayProperties(); Console.WriteLine(sName + have + ifoots.ToString() + foots (from Chicken class)); } } class Tiger: Animal { publicTiger(intival) { setFoot(ival); } public override voiddisplayProperties() // chú ý hàm này { Console.WriteLine(Tiger has + ifoots.ToString()+ foots); } } }

Kết quả thực hiện chương trình

interface_2

Hàm displayProperties() trong lớp Tiger overrides hàm displayProperties() trong lớp Animal.

Vậy là xong bài này. Hẹn gặp các bạn ở bài tiếp theo

LEAVE A REPLY

Please enter your comment!
Please enter your name here