You are on page 1of 13

11/2/2021

Chương 4. Tính kế thừa (inheritance)

Nội dung
 Khái niệm
 Cách khai báo
 Các dạng kế thừa
 Ghi đè phương thức (Overriding)
 Overloading và Overriding

Lập trình hướng đối tượng Slide 2

Chương 4. Tính kế thừa (inheritance)

Khái niệm
 Tính kế thừa là một tính chất quan trọng trong lập trình
hướng đối tượng. Cho phép định nghĩa một lớp mới dựa
trên các lớp đã có.
 Một lớp kế thừa từ 1 lớp khác được gọi là lớp dẫn xuất
(derived class, sub class lớp con).
 Một lớp được một lớp khác kế thừa gọi là lớp cơ sở
(base class, super class lớp cha).
 Tính kế thừa thể hiện một mối quan hệ IS – A hay là mối
quan hệ cha con.
 Lớp dẫn xuất sẽ kế thừa các thành phần dữ liệu và hàm
thành phần của lớp cơ sở đồng thời bổ sung thêm các
thành phần mới.
Lập trình hướng đối tượng

1
11/2/2021

Chương 4. Tính kế thừa (inheritance)

 Java không có đa kế thừa. Mỗi đối tượng chỉ được phép


kế thừa trực tiếp từ một đối tượng khác.
 Kế thừa là một quan hệ kiểu IS-A, cũng có tên gọi là mối
quan hệ cha –con.
 Ta sử dụng từ khóa extends để biểu thị mối quan hệ kế
thừa.
 Ví dụ: HocSinh extends ConNguoi
 ConNguoi: lớp cơ sở
 HocSinh: lớp dẫn xuất.

Lập trình hướng đối tượng

Chương 4. Tính kế thừa (inheritance)

Cách khai báo


 [phạm vi truy xuất] class <tên lớp dẫn xuất>
extends <tên lớp cơ sở>
 {
// khai báo các thuộc tính cần bổ sung
// viết lại các phương thức cùng tên trong lớp cha,
// tìm cách gọi lại các phương thức của lớp cha
// bổ sung các phương thức mới
 }

Lập trình hướng đối tượng

2
11/2/2021

Chương 4. Tính kế thừa (inheritance)

Ý nghĩa của tính kế thừa


 Khi dùng tính kế thừa trong phân tích sẽ tạo nên
code tường minh, mạch lạc, giúp bảo trì, nâng
cấp chương trình dễ dàng hơn.
 Nếu 2 đối tượng A và B có cùng bản chất, cùng
chung một số đặc điểm và hành vi  Sẽ có đối
tượng C gồm các đặc điểm chung của 2 đối
tượng A và B. Hay ta nói A và B kế thừa từ đối
tượng C.

Lập trình hướng đối tượng

Chương 4. Tính kế thừa (inheritance)


Phương pháp xây dựng
Mối quan hệ trừu tượng hóa – Cụ thể hóa

Lập trình hướng đối tượng

3
11/2/2021

Chương 4. Tính kế thừa (inheritance)


Phương pháp xây dựng
Mối quan hệ trừu tượng hóa – Cụ thể hóa

Lập trình hướng đối tượng

Chương 4. Tính kế thừa (inheritance)

Ví dụ 1

Họ tên
Địa chỉ
Con người Nhập thông tin
Xuất thông tin

Sinh viên Giáo viên

Điểm
Mã sinh viên Trình độ
Tính điểm Chuyên ngành
Xét thi đua

Lập trình hướng đối tượng

4
11/2/2021

Chương 4. Tính kế thừa (inheritance)

Constructor trong quan hệ kế thừa


 Trong quan hệ kế thừa, phương thức khởi tạo không
được kế thừa.
 Phương thức khởi tạo mặc định (phương thức khởi tạo
không tham số) của lớp cha luôn luôn được gọi mỗi khi
có một đối tượng thuộc lớp con khởi tạo. Và được gọi
trước phương thức khởi tạo của lớp con.
 super([các tham số…]): gọi hàm thiết lập của lớp cơ sở
 super.tên phương thức(…): gọi thực hiện phương thức
của lớp cơ sở

Lập trình hướng đối tượng

Chương 4. Tính kế thừa (inheritance)

Ví dụ 2
public class Animal {
public void Eating(){
System.out.println("Eating");
}
}
public class Dog extends Animal{
public void Bark(){
System.out.println("Barking");
}
} Lập trình hướng đối tượng

5
11/2/2021

Chương 4. Tính kế thừa (inheritance)

Ví dụ 3
public class testDog {
public static void main(String[] args) {
Dog x=new Dog();
x.Bark();
x.Eating();
}
}
Kết quả:
Barking
Eating
Lập trình hướng đối tượng

Chương 4. Tính kế thừa (inheritance)

Ví dụ 3
public class Animal {
public void Eating(){
System.out.println("Eating"); }
}
public class Dog extends Animal{
public void Bark(){
System.out.println("Barking");
}
public void Eating(){
System.out.println("Eating cua lop Dog"); }
}
Lập trình hướng đối tượng

6
11/2/2021

Chương 4. Tính kế thừa (inheritance)

public class testDog {


public static void main(String[] args) {
Dog x=new Dog();
x.Bark();
Kết quả
x.Eating(); } CT?
}
Kết quả:
Barking
Eating cua lop Dog

Lập trình hướng đối tượng

Chương 4. Tính kế thừa (inheritance)

Vid dụ 4
public class Animal {
public void Eating(){
System.out.println("Eating"); }
}
public class Dog extends Animal{
public void Bark(){
System.out.println("Barking");
}
public void Eating(){
super.Eating();
System.out.println("Eating cua lop Dog"); }
Lập trình hướng đối tượng
}

7
11/2/2021

Chương 4. Tính kế thừa (inheritance)

public class testDog {


public static void main(String[] args) {
Dog x=new Dog();
x.Bark();
x.Eating(); }
}
Kết quả:
Barking
Eating
Eating cua lop Dog
Lập trình hướng đối tượng

Chương 4. Tính kế thừa (inheritance)

Kế thừa Has a - Aggregation in Java


 Dùng cho trường hợp xây dựng đối tượng mới
mà thuộc tính của đối tượng là 1 đối tượng đã
có.
 Ví dụ:
class Employee{
int id;
String name;
Address address;//Address is a class
...
}

Lập trình hướng đối tượng

8
11/2/2021

Chương 4. Tính kế thừa (inheritance)

Ví dụ 5
class Operation{
int square(int n){
return n*n; } }
class Circle{
Operation op;//aggregation
double pi=3.14;
double area(int radius){
op=new Operation();
int rsquare=op.square(radius);
//code reusability (i.e. delegates the method call).
return pi*rsquare; }
public static void main(String args[]){
Circle c=new Circle();
double result=c.area(5);
System.out.println(result); } }

Lập trình hướng đối tượng

Chương 4. Tính kế thừa (inheritance)

Ví dụ 6
public class Address {
String city,state,country;
public Address(String city, String state, String cou
ntry) {
this.city = city;
this.state = state;
this.country = country;
}

Lập trình hướng đối tượng

9
11/2/2021

Chương 4. Tính kế thừa (inheritance)

Ví dụ 6
public class Emp {
private int id;
private String name;
private Address address;
public Emp(int id, String name,Address address) {
this.id = id;
this.name = name;
this.address=address;
}
void display(){
System.out.println(id+" "+name);
System.out.println(address.city+" "+address.state+" "+addre
ss.country);
Lập trình hướng đối tượng
}

Chương 4. Tính kế thừa (inheritance)

Ví dụ 6
public static void main(String[] args) {
Address address1=new Address("gzb","UP","india");
Address address2=new Address("gno","UP","india");

Emp e=new Emp(111,"varun",address1);


Emp e2=new Emp(112,"arun",address2);

e.display();
e2.display();

}
}
Lập trình hướng đối tượng

10
11/2/2021

Chương 4. Tính kế thừa (inheritance)

Ghi đè phương thức - Overriding


 Ghi đè phương thức là việc xây dựng lại nội dung của
phương thức đã được định nghĩa hoặc xây dựng trong
đối tượng cha cho phù hợp với các công việc cần xử lý
của đối tượng con.
 Sử dụng ký hiệu @Override để thông báo phương thức
nào là phương thức được ghi đè trong đối tượng con.
 Sử dụng từ khóa super.Tên_Phương_Thức: gọi đến
phương thức của đối tượng cha để kế thừa lại các công
việc đã được thực hiện ở đối tượng cha

Lập trình hướng đối tượng

Chương 4. Tính kế thừa (inheritance)

Overriding và Overloading
Method Overloading Method Overriding
Phương thức overloading được dùng để Phương thức overriding được dùng để
làm tăng tính rõ ràng (readability) của cung cấp khả năng thực thi đặc thù của
chương trình. phương thức mà đã được cung cấp ở lớp
cha.
Các phương thức overloading được triển Phương thức overriding xuất hiện trong
khai bên trong 1 lớp hai lớp có mối quan hệ IS_A
Trong phương thức overLoading tham số Phương thức overriding các tham số phải
phải khác nhau giống nhau.
Overloading là minh hoah cho tính đa hình Phương thức overriding là minh họa cho
trong thời gian biên dịch. (Compile time tính đa hình ở thời gian chạy (run time
polymorphism) polymorphism) .
Phương thức Overloading có thể giống Kiểu dữ liệu trả về của phương thức
hoặc khác nhau ở giá trị trả về. Nhưng Overriding phải giống nhau hoặc là hằng
tham số phải thay đổi. số.

Lập trình hướng đối tượng

11
11/2/2021

Chương 4. Tính kế thừa (inheritance)

Bài tập:
1. Một đơn vị sản xuất gồm có các cán bộ là công nhân, kỹ sư,
nhân viên.
+ Mỗi cán bộ cần quản lý lý các thuộc tính: Họ tên, năm sinh, giới
tính, địa chỉ (Giới tính phải ghi là Nam hoặc Nữ, độ tuổi phải
>=18)
+ Các công nhân cần quản lý: Bậc (công nhân bậc 3/7, bậc 4/7 ...)
+ Các kỹ sư cần quản lý: Ngành đào tạo
+ Các nhân viên phục vụ cần quản lý thông tin: công việc
a. Xây dựng các lớp NhanVien, CongNhan, KySu kế thừa từ lớp
CanBo
Lập trình hướng đối tượng

Chương 4. Tính kế thừa (inheritance)

b. Xây dựng các hàm để truy nhập, hiển thị thông tin và
kiểm tra về các thuộc tính của các lớp.
c. Tạo 3 đối tượng có kiểu lần lượt là công nhân, kỹ sư,
nhân viên. Thực hiện nhập và xuất thông tin các cán bộ
vừa tạo

Lập trình hướng đối tượng

12
11/2/2021

Chương 4. Tính kế thừa (inheritance)

Bài tập
 2. Hãy in thông tin chu vi, diện tích, độ dài cạnh,
chiều dài, chiều rộng của hình vuông và hình
chữ nhật nếu biết thông tin 4 đỉnh hình vuông,
hình chữ nhật đó.

Lập trình hướng đối tượng

13

You might also like