1. Trang chủ
  2. » Công Nghệ Thông Tin

Kế thừa (inheritance) csharp

12 168 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 882,88 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 1 Kế thừa inheritance 1 Xây dựng lớp có tính kế thừa Xây dựng lớp có tính kế thừa Khái niệm kế thừa trong C# ¾Kế thừa là cơ chế cho ph

Trang 1

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 1

Kế thừa (inheritance)

1

Xây dựng lớp

có tính kế thừa

Xây dựng lớp

có tính kế thừa

Khái niệm kế thừa trong C#

¾Kế thừa là cơ chế cho phép định nghĩa một lớp mới (kế thừa từ lớp cha)

¾Sau đó xây dựng thêm các thuộc tính và các phương thức riêng của lớp đó.

¾Lớp cha trong sự kế thừa được gọi là lớp

cơ sở (base class)

¾Lớp con trong sự kế thừa được gọi là lớp dẫn xuất (derived class)

¾Derived class có hầu hết các thành phần Derived class giống như lớp cơ sở trừ ????

Trang 2

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 3

Khái niệm kế thừa trong C#

¾Quan hệ “là 1”: Kế thừa được sử dụng thông dụng nhất để biểu diễn quan hệ "là 1" VD:

‰ Một sinh viên là một con người

‰ Một tam giác là một đa giác

¾Kế thừa thường được dùng theo 2 cách:

‰ Để phản ánh mối quan hệ giữa các lớp

‰ Để phản ánh sự chia sẻ mã chương trình giữa các lớp

¾Lớp Con Gà:

‰Có chân

‰Có mắt

‰Có cánh

‰Biết chạy

‰Biết ngủ

‰Biết bay

‰Biết vẫy cánh

¾Lớp Con Chó:

‰Có chân

‰Có mắt

‰Có đuôi

‰Biết chạy

‰Biết ngủ

‰Biết sủa

‰Biết vẫy đuôi

Khái niệm kế thừa trong C#

Mã lệnh

bị trùng

Mã lệnh

bị trùng

Trang 3

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com

¾Lớp động vật:

‰Có chân

‰Có mắt

‰Biết chạy

‰Biết ngủ

5

Khái niệm kế thừa trong C#

¾Lớp Con Gà:

‰Có cánh

‰Biết bay

‰Biết vẫy cánh

¾Lớp Con Chó:

‰Có đuôi

‰Biết sủa

‰Biết vẫy đuôi

Syntax

¾Cú pháp định nghĩa lớp dẫn xuất (lớp con):

class TênLớpCon : TênLớpCha

{ // Thân lớp con

}

Hoặc

class TênLớpDẫnXuất : TênLớpCơSở

{ // Thân lớp dẫn xuất

}

class DerivedClass : BaseClass

{ // body of derived class

Trang 4

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 7

VD

// Lớp cơ sở Point2D

class Point2D

{

public int x,y;

public void Xuat2D()

{

Console.WriteLine("({0}, {1} )", x, y);

}

}

VD

// Lop dan xuat Point3D ke thua tu lop Point2D

class Point3D:Point2D

{

public int z;

public void Xuat3D()

{

Console.WriteLine("({0}, {1} , {2})", x, y, z);

}

}

Trang 5

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 9

VD

public static void Main()

{

Point2D p2 = new Point2D();

p2.x = 1;

p2.y = 2;

p2.Xuat2D();

Point3D p3 = new Point3D();

p3.x = 4;

p3.y = 5;

p3.z = 6; // ?

p3.Xuat3D();

p3.Xuat2D(); // ?

Console.ReadLine();

}

VD:

Xây dựng Person class và Student class ?

Trang 6

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 11

Gọi Constructor của lớp Cơ sở

¾Vì lớp dẫn xuất không thể kế thừa phương thức tạo lập ( Constructor ) của lớp cơ sở nên một lớp dẫn xuất phải thực thi phương thức tạo lập riêng của mình

¾Nếu lớp cơ sở có một phương thức tạo lập mặc định (tức là không có phương thức tạo lập hoặc phương thức tạo lập không có tham số) thì phương thức tạo lập của lớp dẫn xuất được định nghĩa như cách thông thường

Gọi Constructor của lớp Cơ sở

¾Nếu lớp cơ sở có phương thức tạo lập có tham

số thì lớp dẫn xuất phải định nghĩa phương thức tạo lập có tham số theo cú pháp sau:

TênLớpCon( ThamSốLớpCon ): base ( ThamSốLớpCha ) {

// Khởi tạo giá trị cho các thành phần của lớp dẫn xuất

}

/Note: giáo trình Tr 42 ghi nhầm cú pháp

Trang 7

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 13

VD

// Lớp cơ sở Point2D

class Point2D

{

public int x,y;

public Point2D( int a, int b)

{

x = a ; y = b;

}

public void Xuat2D()

{

Console.WriteLine("({0}, {1} )", x, y);

}

}

VD

// Lop dan xuat Point3D ke thua tu lop Point2D

class Point3D:Point2D

{

public int z;

public Point3D( int a, int b, int c) : base (a,b) {

z = c ;

}

public void Xuat3D()

{

Console.WriteLine("({0}, {1} , {2})", x, y, z);

}

Trang 8

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 15

VD

public static void Main()

{

Point2D p2 = new Point2D(1,2);

Console.Write("Toa do cua diem 2 D :");

p2.Xuat2D();

Point3D p3 = new Point3D(4,5,6);

Console.Write("Toa do cua diem 3 D :");

p3.Xuat3D();

Console.ReadLine();

}

Định nghĩa lại phương thức của lớp dẫn xuất

¾T.H derived class có property or method trùng tên với base class thì trình biên dịch sẽ có cảnh báo dạng như sau:

“keyword new is required on ‘LớpDẫnXuất.X’ because it hides inherited member on ‘LớpCơSở.X ‘”

¾Để khắc phục việc này ta dùng từ khóa new ngay câu lệnh khai báo thành phần đó

¾Từ khóa new trong T.H này có tác dụng che dấu thành phần kế thừa đó đối từ base class.

Trang 9

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 17

Định nghĩa lại phương thức của lớp dẫn xuất

¾Nếu phương thức của derived class

muốn truy cập đến thành phần X của

base class ?

¾Sử dụng từ khóa base theo cú pháp:

base X

vd trang 45

Tham chiếu thuộc base class

¾Một tham chiếu thuộc base class

có thể trỏ đến một đối tượng thuộc

derived class

¾Nhưng nó chỉ được phép truy cập

đến các thành phần được khai báo

trong lớp cơ sở

vd trang 47

Trang 10

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 19

Mức độ truy cập của lớp dẫn xuất

19

Access Modifier

Of Derived class

Access Modifier

Of Derived class

Mức độ truy cập của lớp dẫn xuất

¾Điều khiển quyền truy xuất dùng để gán

quyền truy xuất cho thuộc tính hoặc

phương thức từ đối tượng hay từ lớp

dẫn xuất có được phép truy xuất thuộc

tính ở lớp mà nó được khái báo hay không

¾Các từ khóa thường dùng là: public,

private, protected

Trang 11

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 21

Mức độ truy cập của lớp dẫn xuất

public Công cộng, không giới hạn

private Riêng tư, chỉ được truy xuất trong nội bộ của lớp đó mà thôi

protected

Được bảo vệ, chỉ được truy xuất trong nội bộ của lớp đó và các lớp con (lớp dẫn xuất) kế thừa từ lớp đó

VD:

class Tau

{ // private or protected

public int nhienlieu = 0;

public void Chay()

{

nhienlieu = 10;

}

class TauChien:Tau {

public void Chay() {

nhienlieu = 20; }

}

Trang 12

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com

VD:

class Program {

static void Main(string[] args)

{

Tau a = new Tau();

a.Chay();

Console.WriteLine(a.nhienlieu);

TauChien b = new TauChien();

b.Chay();

Console.WriteLine(b.nhienlieu);

}

}

// nhienlieu of Tau class khai báo private or protected ?

23

Q&A

Bài tập:

1 Đọc lại bài giảng

2 Làm các bài VD & bài tập trong GT

3 Đọc bài: Kế thừa

4 Buổi tới thảo luận & kiểm tra bài cũ

Ngày đăng: 18/10/2014, 02:23

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w