Tải bản đầy đủ (.pdf) (49 trang)

Phương pháp lập trình đối hướng đối tượng - Kế thừa pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.02 MB, 49 trang )

PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
Nguyễn Hoàng Anh –
KẾ THỪA
(INHERITANCE)
Nội dung trình bày
 Giới thiệu kế thừa
 Phạm vi sử dụng
 Lớp Object
 Cài đặt lại phƣơng thức

2
Giới thiệu kế thừa
 Tính chất kế thừa trong lập trình hƣớng đối tƣợng cho
phép xây dựng một lớp đối tƣợng mới bằng cách mở
rộng lớp đối tƣợng có sẵn.
 Lớp đối tƣợng có sẵn đƣợc gọi là lớp cơ sở (base
class)
 Lớp đối tƣợng mới đƣợc gọi là lớp dẫn xuất (derived
class)

3
Kế thừa

4
Kế thừa
 Lớp sinh viên đƣợc gọi là lớp cơ sở trực tiếp của lớp
chính quy, lớp cao đẳng, lớp tại chức và lớp hoàn
chỉnh.
 Các lớp dẫn xuất chính quy, cao đẳng, tại chức, hoàn
chỉnh đƣợc gọi là các lớp dẫn xuất kế thừa trực tiếp
từ lớp sinh viên.



5
Kế thừa
 Lớp dẫn xuất bao gồm các thành phần sau
– Các thuộc tính và các phƣơng thức kế thừa đƣợc từ
lớp cơ sở
– Các thuộc tính và các phƣơng thức đƣợc định nghĩa
thêm.

6
Kế thừa
 Lớp dẫn xuất đƣợc gọi là mở rộng lớp cơ sở bởi vì
lớp dẫn xuất vừa chứa các thành phần kế thừa đƣợc
từ lớp cơ sở vừa chứa các thành phần riêng của nó.
 Lƣu ý là lớp dẫn xuất không thể xóa bất cứ thuộc tính
hay phƣơng thức nào kế thừa đƣợc từ lớp cơ sở.

7
Khai báo kế thừa trong C#
 Trong C++ một lớp đối tƣợng đƣợc phép kế thừa từ
nhiều lớp đối tƣợng có sẵn.
 Trong C# và Java, một lớp đối tƣợng đƣợc phép kế
thừa một lớp đối tƣợng có sẵn.

8
public class A
{

}
public class B : A

{

}

Kế thừa trong C#
 Lớp A đƣợc gọi là lớp cơ sở trực tiếp của lớp B
 Lớp B đƣợc gọi là lớp dẫn xuất kế thừa trực tiếp từ
lớp A
 Sử dụng dấu : để khai báo lớp B kế thừa lớp A
 Lớp B kế thừa đƣợc các thuộc tính và các phƣơng
thức đƣợc định nghĩa trong lớp A
 Lớp B đƣợc phép thêm các thuộc tính và các phƣơng
thức riêng của mình
 Lớp B không đƣợc phép xóa các thuộc tính hay các
phƣơng thức kế thừa đƣợc từ lớp A.

9
Ký hiệu kế thừa
10
Phạm vi sử dụng
 Các thuộc tính và các phƣơng thức có thể đƣợc khai
báo với 3 phạm vi sử dụng cơ bản đó là
– Private
– Protected
– Public

11
Phạm vi sử dụng
 Thuộc tính hay phương thức đƣợc khai báo với
phạm vi là private thì thuộc tính hay phƣơng thức đó

chỉ được sử dụng trực tiếp bên trong lớp đó.
 Thuộc tính hay phương thức đƣợc khai báo với
phạm vi là public thì thuộc tính hay phƣơng thức đó
có thể được sử dụng trực tiếp bên trong lớp, bên
trong các lớp dẫn xuất và bên các lớp khác.
 Thuộc tính hay phương thức đƣợc khai báo với
phạm vi là protected thì thuộc tính hay phƣơng thức
đó có thể được sử dụng trực tiếp bên trong lớp lẫn
bên trong các lớp dẫn xuất.

12
Phạm vi sử dụng
13
STT
Tên phạm vi
Phạm vi sử dụng
1
private
Được sử dụng trực tiếp bên trong lớp
2
public
Được sử dụng trực tiếp bên trong lớp và các lớp khác
3
protected
Được sử dụng trực tiếp bên trong lớp và trong các lớp dẫn xuất

Phạm vi sử dụng private
 Các thuộc tính hay phƣơng thức đƣợc khai báo với
phạm vi sử dụng là private trong lớp cơ sở sẽ đƣợc
kế thừa trong các lớp dẫn xuất

 Nhƣng không đƣợc phép sử dụng trực tiếp các thuộc
tính hay các phƣơng thức này.
 Các lớp dẫn xuất cũng không thể xóa các thuộc tính
hay các phƣơng thức đƣợc kế thừa trong lớp cơ sở.

14
Phạm vi sử dụng private
 Các lớp dẫn xuất kế thừa đƣợc các thuộc tính hay
các phƣơng thức là private của lớp cơ sở
 Nhƣng không đƣợc phép sử dụng trực tiếp mà phải
sử dụng gián tiếp thông qua các phƣơng thức
protected hay public của lớp cơ sở mà có sử dụng
các thuộc tính hay phƣơng thức này.
 Ví dụ nhƣ sử dụng các phƣơng thức cung cấp, cập
nhật thông tin và các property hay phƣơng thức nhập,
xuất… (có phạm vi sử dụng protected hay public)

15
Phạm vi sử dụng protected
 Các thuộc tính hay phƣơng thức đƣợc khai báo với
phạm vi sử dụng là protected trong lớp cơ sở sẽ đƣợc
kế thừa trong các lớp dẫn xuất, đƣợc truy xuất trực
tiếp và trở thành các thuộc tính hay phƣơng thức
protected của các lớp dẫn xuất.
 Các lớp dẫn xuất không thể xóa các thuộc tính hay
các phƣơng thức đƣợc kế thừa trong lớp cơ sở.

16
Phạm vi sử dụng public
 Các thuộc tính hay phƣơng thức đƣợc khai báo với

phạm vi sử dụng là public trong lớp cơ sở sẽ đƣợc kế
thừa trong các lớp dẫn xuất, đƣợc truy xuất trực tiếp
và trở thành các thuộc tính hay phƣơng thức public
của các lớp dẫn xuất.
 Các lớp dẫn xuất không thể xóa các thuộc tính hay
các phƣơng thức đƣợc kế thừa trong lớp cơ sở.
17
Phạm vi sử dụng
Phạm
vi sử dụng ở lớp cơ sở
Phạm
vi sử dụng ở lớp dẫn xuất
private

Kế
thừa được, không truy xuất trực
tiếp,
sử
dụng gián tiếp thông qua các
phương
thức
protected hay public của lớp cơ sở

protected

Kế
thừa được, protected, truy xuất
trực
tiếp


public

Kế
thừa được, public, truy xuất trực
tiếp
18
Phạm vi sử dụng private
19

Lớp cơ sở A
1
2
3
4
5
6
7
8
9
10
11
12
public class A
{
private int n;
public void SetN(int n)
{
this.n=n;
}
public int GetN()

{
return this.n;
}
}

Phạm vi sử dụng private
20

Lớp dẫn xuất B
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class B : A
{
private int m;
public void SetM(int m)

{
this.m = m;
}
public int GetM()
{
return this.m;
}
public void Xuat()
{
Console.WriteLine("n={0}, m={1}", this.GetN(),
this.m);
}
}

Phạm vi sử dụng private
21

Lớp Program
1
2
3
4
5
6
7
8
9
10
public class Program
{

static void Main(string[] args)
{
B b1 = new B();
b1.SetN(10);
b1.SetM(20);
b1.Xuat("Thông tin của b1");
}
}

Thông tin của b1
n=10, m=20

Phạm vi sử dụng private
 Lớp cơ sở A có:
– Thuộc tính là n (có phạm vi sử dụng private)
– Phƣơng thức GetN, SetN (có phạm vi sử dụng
public)

22
Phạm vi sử dụng private
 Lớp dẫn xuất B kế thừa từ A có:
– Các thuộc tính kế thừa đƣợc từ A: n (không nhìn
thấy và không sử dụng trực tiếp đƣợc)
– Các thuộc tính riêng của B : m (có phạm vi sử dụng
private)
– Các phƣơng thức kế thừa đƣợc từ A: GetN, SetN
(có phạm vi sử dụng public)
– Các phƣơng thức riêng của B: GetM, SetM, Xuat
(có phạm vi sử dụng public)



23
Phạm vi sử dụng private
 Lớp B kế thừa đƣợc thuộc tính n của lớp cơ sở A
nhƣng không thể sử dụng trực tiếp(nhìn thấy trực
tiếp) mà sử dụng gián tiếp thuộc tính n thông qua
phƣơng thức GetN và SetN kế thừa từ lớp cơ sở A.
 Tƣơng tự cho việc sử dụng phƣơng thức là private kế
thừa đƣợc từ lớp cơ sở

24
Phạm vi sử dụng protected
25

Lớp cơ sở A
1
2
3
4
5
6
7
8
9
10
11
12
public class A
{
protected int n;

public void SetN(int n)
{
this.n=n;
}
public int GetN()
{
return this.n;
}
}

×