Lớp trừu tƣợng (abstract class)

Một phần của tài liệu bài giảng lập trình hướng đối tượng c (Trang 51)

CHƢƠNG IV: KẾT TẬP VÀ KẾ THỪA

2.4. Lớp trừu tƣợng (abstract class)

Lớp trừu tượng là lớp cơ sở cho tất cả các lớp có cùng bản chất. Lớp trừu tượng định nghĩa ra các thành phần chung nhất, mô tả bản chất của các lớp sẽ kế thừa từ lớp này.

Lớp trừu tượng được định nghĩa để các lớp khác kế thừa từ nó chứ không phải để sử dụng. Vì vậy không thể tạo đối tượng từ lớp trừu tượng

Xem xét một ví dụ trên lớp cơ sở Animal có phương thức Eat(), MakeSound(). Chúng ta có các lớp khác là Cat, Dog, Lion, Tiger là các lớp kế thừa từ Animal. Các lớp này có đặc điểm chung, cùng bản chất là một loại Animal thì chúng đều có phương thức Eat(), MakeSound(), chúng có phương thức Eat() giống nhau, nhưng mỗi một lớp MakeSound() theo các cách khác nhau, chúng không tạo ra các âm thanh giống nhau. Như vậy, lớp Animal là lớp trừu tượng của các lớp khác, nó chỉ định nghĩa rằng đã là Animal thì sẽ có phương thức Eat(), MakeSound(). Còn tại mỗi lớp dẫn xuất từ Animal sẽ định nghĩa lại phương thức MakeSound() theo cách riêng của mình. Lớp trừu tượng chỉ định nghĩa về mặt cấu trúc để phân biệt bản chất. Còn các lớp dẫn xuất mới định nghĩa cụ thể các thành phần khác biệt của mình.

Cú pháp

Về hình thức định nghĩa lớp trừu tượng chỉ khác so với định nghĩa lớp thông thường là có thêm khóa abstract trước từ khóa class và trong thân lớp có ít nhất một phương thức được định nghĩa với từ khóa abstract. Phương thức này chỉ có phần khai báo không có phần thân, chỉ định rằng phương thức này sẽ được định nghĩa trong các lớp dẫn xuất. Về hình thức lớp trừu tượng (abstract) là lớp có ít nhất một phương thức trừu tượng (abstract).

abstract class <tên lớp> { //thân lớp Method_1() { //thân phương thức } abstract Method_2(); abstract Method_3(); }

Trong lớp trừu tượng có thể định nghĩa các phương thức mang tính chất giống nhau đối với tất cả các lớp dẫn xuất. Các phương thức này được định nghĩa như bình thường không có gì khác biệt. Trong ví dụ trên lớp Animal định nghĩa phương thức Eat() giống nhau đối với tất cả các lớp dẫn xuất. Ngoài ra, còn có các phương thức mà chúng khác nhau đối với các lớp dẫn xuất khác nhau. Các phương thức này định nghĩa với từ khóa abstract và không có phần thân. Phần thân sẽ được định nghĩa trong các lớp dẫn xuất. Đó chính là phương thức

MakeSound() trong ví dụ trên

Ví dụ (IV.5) Xây dựng lớp trừu tƣợng

Bước 1: Vẫn trong solution Session_IV, thêm một dự án mới tên là AbstractClass Bước 2: Thêm lớp Animal vào dự án và viết mã như bên dưới

abstract class Animal {

public void Eat() {

}

abstract public void MakeSound(); }

Bước 3: Thêm lớp Cat vào dự án và chèn mã như sau class Cat:Animal

{

public override void MakeSound() {

Console.WriteLine("Cat sounds Meo Meo"); }

}

Bước 4: Thêm lớp Dog vào dự án và chèn mã như sau class Dog:Animal

{

//định nghĩa thân phương thức MakeSound() của lớp trừu tượng Animal public override void MakeSound()

{

Console.WriteLine("Dog sounds Gau Gau"); }

}

Bước 5: Chèn mã vào lớp Program như sau

class Program {

static void Main(string[] args) {

Cat objCat = new Cat(); Dog objDog = new Dog(); objCat.Eat(); objCat.MakeSound(); objDog.Eat(); objDog.MakeSound(); Console.ReadLine(); } }

Bước 6: Thiết lập AbstractClass là dự án mặc định bằng cách click chuột phải chọn Set as Startup Project

Bước 7: Dịch và chạy chương trình màn hình hiển thị như sau

Một phần của tài liệu bài giảng lập trình hướng đối tượng c (Trang 51)