Tính kế thừa trong C# là gì?

uocmo_kchodoi

Moderator
TÍNH KẾ THỪA TRONG C#, ĐA KẾ THỪA
Khái niệm: Tính kế thừa (Inheritance) trong C# cho phép lập trình viên tạo ra một lớp mới kế thừa một lớp đã tồn tại. Nghĩa là lớp được kế thừa sẽ có tất cả những thuộc tính và phương thức với quyền truy cập không phải private của lớp cha. Đây là một trong những khái niệm quan trọng nhất trong lập trình hướng đối tượng..

Khi tạo một lớp, thay vì viết toàn bộ các thành viên dữ liệu và các hàm thành viên mới, lập trình viên có thể nên kế thừa các thành viên của một lớp đang tồn tại. Lớp đang tồn tại này được gọi là Base Class - lớp cơ sở, và lớp mới được xem như là Derived Class – lớp thừa kế.

Cũng tương tự như tính kế thừa trong Java, C# chỉ hỗ trợ đơn thừa kế (nghĩa là một lớp chỉ được phép kế thừa một lớp khác). Hình bên dưới là một ví dụ về tính kế thừa trong c#, cụ thể khi tạo lớp NhanVien và lớp KhachHang, chúng ta sẽ kế thừa lớp Nguoi.


1. Lớp cơ sở (Base Class) và Lớp thừa kế (Derived Class) trong C#

Một lớp có thể được kế thừa từ hơn một lớp khác, nghĩa là, nó có thể kế thừa dữ liệu và hàm từ nhiều Lớp hoặc Interface cơ sở.

Cú pháp để tạo lớp kế thừa trong C# là:

<acess-specifier> class <base_class>
{
...
}
class <derived_class> : <base_class>
{
...
}
Xét một lớp cơ sở Shape và lớp kế thừa Rectangle sau: tạo 3 lớp có tên lần lượt là Shape, HinhChuNhat, TestCsharp trong đó:

Lớp Shape là lớp cơ sở

using System;
namespace VietJackCsharp
{
class Shape
{

protected int chieu_rong;
protected int chieu_cao;
public void setChieuRong(int w)
{
chieu_rong = w;
}
public void setChieuCao(int h)
{
chieu_cao = h;
}
}
}

Lớp HinhChuNhat là lớp kế thừa

using System;
namespace VietJackCsharp
{
class HinhChuNhat : Shape
{
public int tinhDienTich()
{
return (chieu_cao * chieu_rong);
}
}
}


Lớp TestCsharp chứa phương thức main() để thao tác trên đối tượng HinhChuNhat

using System;
namespace VietJackCsharp
{
public class TestCsharp
{
public static void Main(string[] args)
{
Console.WriteLine("Tinh ke thua trong C#");
Console.WriteLine("------------------------\n");

//tao doi tuong HinhChuNhat
HinhChuNhat hcn = new HinhChuNhat();

hcn.setChieuRong(5);
hcn.setChieuCao(7);

// in dien tich cua doi tuong.
Console.WriteLine("Dien tich hinh chu nhat: {0}", hcn.tinhDienTich());

Console.ReadKey();
}
}
}


Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.

Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

tinh-ke-thua.PNG

2. Khởi tạo Lớp cơ sở (Base Class) trong C#

Lớp kế thừa (Derived Class) trong C# kế thừa các biến thành viên và các phương thức thành viên từ lớp cơ sở. Vì thế, đối tượng của lớp cha nên được tạo trước khi lớp phụ được tạo. Bạn có thể cung cấp các chỉ thị để khởi tạo lớp phụ trong danh sách khởi tạo thành viên.

Chương trình ví dụ sau minh họa cách khởi tạo Lớp cơ sở (Base Class) trong C#: tạo 3 lớp có tên lần lượt là HinhChuNhat, ChiPhiXayDung, TestCsharp như sau:

Lớp HinhChuNhat là lớp cơ sở

using System;
namespace VietJackCsharp
{
class HinhChuNhat
{
//cac bien thanh vien
protected double chieu_dai;
protected double chieu_rong;
// constructor
public HinhChuNhat(double l, double w)
{
chieu_dai = l;
chieu_rong = w;
}
//phuong thuc
public double tinhDienTich()
{
return chieu_dai * chieu_rong;
}

public void Display()
{
Console.WriteLine("Chieu dai: {0}", chieu_dai);
Console.WriteLine("Chieu rong: {0}", chieu_rong);
Console.WriteLine("Dien tich: {0}", tinhDienTich());
}
}
}

Lớp ChiPhiXayDung kế thừa lớp HinhChuNhat

using System;
namespace VietJackCsharp
{
class ChiPhiXayDung : HinhChuNhat
{
private double cost;
public ChiPhiXayDung(double l, double w) : base(l, w)
{ }
public double tinhChiPhi()
{
double chi_phi;
chi_phi = tinhDienTich() * 70;
return chi_phi;
}
public void hienThiThongTin()
{
base.Display();
Console.WriteLine("Chi phi: {0}", tinhChiPhi());
}
}
}


Lớp TestCsharp chứa phương thức main() để thao tác trên đối tượng ChiPhiXayDung

using System;
namespace VietJackCsharp
{
public class TestCsharp
{
public static void Main(string[] args)
{
Console.WriteLine("Tinh ke thua trong C#");
Console.WriteLine("Khoi tao lop co so");
Console.WriteLine("------------------------\n");
//tao doi tuong ChiPhiXayDung
ChiPhiXayDung t = new ChiPhiXayDung(4.5, 7.5);
t.hienThiThongTin();
Console.ReadLine();

Console.ReadKey();
}
}
}


Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

tinh-ke-thua-1.PNG

3. Đa kế thừa trong C#

C# không hỗ trợ đa kế thừa. Tuy nhiên, bạn có thể sử dụng Interface để triển khai đa kế thừa. Ví dụ sau minh họa cách sử dụng Interface để triển khai đa kế thừa trong C#: chúng ta tạo 2 lớp có tên lần lượt là Shape, HinhChuNhat, TestCsharp và một interface có tên làChiPhiSon như sau:

Lớp Shape là lớp cơ sở

using System;
namespace VietJackCsharp
{
class Shape
{

protected int chieu_rong;
protected int chieu_cao;
public void setChieuRong(int w)
{
chieu_rong = w;
}
public void setChieuCao(int h)
{
chieu_cao = h;
}
}
}

interface ChiPhiSon

using System;
namespace VietJackCsharp
{
public interface ChiPhiSon
{
int tinhChiPhi(int dien_tich);
}
}

Lớp HinhChuNhat là lớp kế thừa lớp Shape và interface ChiPhiSon

using System;
namespace VietJackCsharp
{
class HinhChuNhat : Shape, ChiPhiSon
{
public int tinhDienTich()
{
return (chieu_rong * chieu_cao);
}
public int tinhChiPhi(int dien_tich)
{
return dien_tich * 70;
}
}
}

Lớp TestCsharp chứa phương thức main() để thao tác trên đối tượng HinhChuNhat

using System;
namespace VietJackCsharp
{
public class TestCsharp
{
public static void Main(string[] args)
{
Console.WriteLine("Tinh ke thua trong C#");
Console.WriteLine("Vi du minh hoa Da ke thua");
Console.WriteLine("------------------------------");
//tao doi tuong HinhChuNhat
HinhChuNhat hcn = new HinhChuNhat();
int dien_tich;
hcn.setChieuRong(5);
hcn.setChieuCao(7);
dien_tich = hcn.tinhDienTich();

// in dien tich va chi phi.
Console.WriteLine("Tong dien tich: {0}", hcn.tinhDienTich());
Console.WriteLine("Tong chi phi son: 0", hcn.tinhChiPhi(dien_tich));
Console.ReadLine();

Console.ReadKey();
}
}
}

Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

da-ke-thua.PNG

Vậy là chúng ta đã tìm hiểu xong về tính kế thừa trong C# rồi. Chúc bạn sẽ nhanh chóng lĩnh hội nhiều kiến thức để làm chủ ngôn ngữ C# này nhé!
Nguồn: vietjack.com​
 

Chủ đề mới

VnKienthuc lúc này

Không có thành viên trực tuyến.

Định hướng

Diễn đàn VnKienthuc.com là nơi thảo luận và chia sẻ về mọi kiến thức hữu ích trong học tập và cuộc sống, khởi nghiệp, kinh doanh,...
Top