I. Tính Chất Kế Thừa (Inheritance)
- Khái Niệm:
- Kế thừa là cơ chế cho phép một lớp (class) kế thừa các thuộc tính và phương thức từ một lớp khác.
- Lớp kế thừa gọi là lớp con (child class), lớp được kế thừa gọi là lớp cha (parent class).
- Mục Đích:
- Tái sử dụng mã nguồn (code reuse).
- Tổ chức và phân cấp hệ thống, giúp dễ quản lý và mở rộng.
- Cách Sử Dụng:
class ParentClass
{
public string Name { get; set; }
public void Display()
{
Console.WriteLine($"Name: {Name}");
}
}
class ChildClass : ParentClass
{
public void ShowMessage()
{
Console.WriteLine("This is a child class.");
}
}
ChildClass child = new ChildClass();
child.Name = "John";
child.Display(); // Từ lớp cha
child.ShowMessage(); // Từ lớp con
- Ưu Điểm:
- Tăng khả năng tái sử dụng mã.
- Giảm sự trùng lặp mã.
- Lưu Ý:
- Kế thừa đơn trong C#: Một lớp chỉ có thể kế thừa từ một lớp cha.
- Sử dụng từ khóa base để truy cập các thành phần của lớp cha.
II. Tính Chất Đa Hình (Polymorphism)
- Khái Niệm:
- Đa hình là khả năng thực thi một hành vi (phương thức) theo nhiều cách khác nhau.
- Có hai loại:
- Đa hình tại thời điểm biên dịch (Compile-time polymorphism): Overloading (nạp chồng phương thức).
- Đa hình tại thời điểm chạy (Runtime polymorphism): Overriding (ghi đè phương thức).
- Nạp Chồng Phương Thức (Method Overloading):
- Cùng tên phương thức nhưng khác tham số (số lượng hoặc kiểu dữ liệu).
- Ví dụ
class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public double Add(double a, double b)
{
return a + b;
}
}
// Sử dụng
Calculator calc = new Calculator();
Console.WriteLine(calc.Add(3, 5)); // 8
Console.WriteLine(calc.Add(2.5, 4.5)); // 7.0
- Ghi Đè Phương Thức (Method Overriding):
- Cho phép lớp con thay đổi cách triển khai phương thức của lớp cha.
- Sử dụng từ khóa virtual ở lớp cha và override ở lớp con.
class Animal
{
public virtual void Speak()
{
Console.WriteLine("The animal makes a sound.");
}
}
class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("The dog barks.");
}
}
// Sử dụng
Animal myDog = new Dog();
myDog.Speak(); // The dog barks.
- Ưu Điểm:
- Linh hoạt trong thiết kế phần mềm.
- Tăng khả năng mở rộng (open for extension).
- Lưu Ý:
- Phải có từ khóa virtual và override để ghi đè phương thức.
- Đa hình runtime chỉ áp dụng khi sử dụng tham chiếu kiểu lớp cha trỏ đến đối tượng lớp con.
III. So Sánh Kế Thừa và Đa Hình
Đặc Điểm |
Kế Thừa |
Đa Hình |
Khái Niệm |
Chia sẻ và tái sử dụng mã từ lớp cha. |
Hành vi khác nhau với cùng một tên. |
Mục Tiêu |
Tái sử dụng và tổ chức mã. |
Linh hoạt và mở rộng chức năng. |
Loại |
Tương tác giữa lớp cha và lớp con. |
Compile-time hoặc Runtime. |
Từ Khóa |
: để chỉ định kế thừa. |
virtual, override, new. |
IV. Bài Tập Thực Hành
- Tạo lớp cha Vehicle với phương thức Move(). Tạo các lớp con như Car, Bike kế thừa từ Vehicle và ghi đè phương thức Move().
- Bài tập quản lý sinh viên:
- Tạo một hệ thống quản lý nhân viên với các loại nhân viên khác nhau: FullTimeEmployee, PartTimeEmployee, và Intern.
- Lớp cha Employee chứa thông tin chung như Name và CalculateSalary().
- Các lớp con sẽ ghi đè phương thức CalculateSalary() để tính lương theo quy tắc riêng:
- Nhân viên toàn thời gian (FullTimeEmployee): Lương cố định.
- Nhân viên bán thời gian (PartTimeEmployee): Tính lương theo giờ làm việc.
- Thực tập sinh (Intern): Không nhận lương, nhưng in thông báo.
- Sử dụng đa hình để gọi phương thức CalculateSalary() cho các loại nhân viên khác nhau.
V. Kết Luận
- Kế thừa giúp tổ chức mã nguồn rõ ràng, dễ bảo trì.
- Đa hình mang lại sự linh hoạt khi xử lý hành vi cho các đối tượng khác nhau.
- Hai tính chất này kết hợp tạo nên sức mạnh cho lập trình hướng đối tượng, giúp xây dựng các hệ thống phức tạp một cách dễ dàng.
Tác giả: Bạch Ngọc Toàn
Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.