Tính chất kế thừa (Inheritance) và đa hình (polymorphism)
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.
Bài viết liên quan
Sử dụng kiểu tập hợp (Enum)
Enum (viết tắt của Enumeration) trong C# là một kiểu dữ liệu đặc biệt cho phép bạn định nghĩa một tập hợp các hằng số có tên
Đọc thêmTính đóng gói (Encapsulation) và best practices trong OOP
(Tính đóng gói) là một trong những nguyên tắc cơ bản của lập trình hướng đối tượng (OOP).
Đọc thêmTính trừu tượng - Abstract classes and interfaces
Tính trừu tượng (Abstraction) trong OOP là kỹ thuật ẩn đi các chi tiết triển khai và chỉ hiển thị cho người dùng những chức năng cần thiết.
Đọc thêmCách debug ứng dụng C#
Hướng dẫn cách debug chương trình C# trong Visual Studio và Visual Studio Code
Đọc thêmTìm hiểu về các loại Collection trong C#
Trong C#, collections là các cấu trúc dữ liệu được sử dụng để lưu trữ và quản lý các nhóm đối tượng. C# cung cấp nhiều loại collections khác nhau để phù hợp với các yêu cầu cụ thể của lập trình viên
Đọc thêmTổng quan về Generic và Non-Generic Collection
Hiểu khái niệm Generic và Non-Generic Collection và phân biệt giữa Generic Collection và Non-Generic Collection.
Đọc thêmSử dụng mảng (Arrays)
Mảng trong C# là một cấu trúc dữ liệu lưu trữ một dãy các phần tử có bộ nhớ nằm liên tiếp nhau và có kích thước cố đinh.
Đọc thêmLập trình hướng đối tượng
Lập trình hướng đối tượng (Object Oriented Programing) hay còn gọi là OOP. Là một kỹ thuật lập trình cho phép các lập trình viên có thể ánh xạ các thực thể bên ngoài đời thực và trừu tượng hoá thành các class và object trong mã nguồn.
Đọc thêmVòng lặp (loop)
Trong thực tế khi bạn cần thực thi một khối lệnh nhiều lần. Vòng lặp cho phép chúng ta thực thi một câu lệnh hoặc một khối lệnh nhiều lần.
Đọc thêmCấu trúc điều khiển Swicth case
C# cung cấp một cấu trúc khác để thực hiện rẽ nhiều nhánh thay cho việc lồng ghép nhiều if-else là cấu trúc switch-case.
Đọc thêm