You are on page 1of 22

REVIEW

KHÓA HỌC JAVA CORE


Biên soạn: GV. Phạm Trung Đoan

Bài 3: Quan hệ giữa các đối tượng


KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

TÍNH KẾ THỪA

I. Định nghĩa
II. Ví dụ
III. Áp dụng tính kế thừa trong phân tích
IV. Phương thức trừu tượng - Lớp trừu tượng
V. Ghi đè phương thức
VI. Thực hành
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

I. Định nghĩa

Thừa hưởng lại các

B
Thuộc tính, phương thức

A
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

II. Ví dụ

Nhân Viên
- Họ tên
- Tuổi
Con Người
- Địa chỉ
- Nghề nghiệp
Học Sinh
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

II. Tác dụng của kế thừa


Xây dựng các kiến trúc chương trình một cách logic, khoa học

Tái sử dụng được tài nguyên của chương trình

Chuyên biệt hóa các đối tượng: Các đối tượng con có thể sẽ được
mở rộng và cụ thể, chi tiết hơn so với đối tượng cha
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

II. Chú ý

JAVA
không có
ĐA KẾ THỪA
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

III. Áp dụng tính kế thừa trong phân tích


B1,B2,B3….

B4. Hình thành đối tượng cha từ 2 hoặc nhiều đối


tượng có chung bản chất và cùng chung 1 số thuộc
tính, phương thức.

Danh sách các đối tượng


riêng biệt, tối ưu
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

VI. Ghi đè phương thức

Là việc lớp con xây dựng lại


phương thức đã được định
nghĩa ở lớp cha
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

VI. Ghi đè phương thức(override)

Ghi đè lại phương thức của lớp cha


(Dựa trên những gì
đã được xây dựng từ lớp cha)

class ConNguoi { class NhanVien extends ConNguoi {


String hoten; String ngheNghiep;
void inTT() { void inTT() {
// in ra HoTen super.inTT();
} // in ra ngheNghiep
} }
}
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

VI. Ghi đè phương thức(override)

Ghi đè lại phương thức của lớp cha


(KHÔNG Dựa trên những gì
đã được xây dựng từ lớp cha)

class ConNguoi { class NhanVien extends ConNguoi {


String hoten; String ngheNghiep;
void inTT() { void inTT() {
// in ra HoTen super.inTT();
} // in ra ngheNghiep
} }
}
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

VI. Nạp chồng phương thức(overloading)

1 Class có thể có nhiều phương thức


trùng tên khác tham số thì được gọi là
overloading

class Person{
void diCho(int tien) {
}
void diCho(int tien,String danhSachCanMua) {
}
}
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

V. Phương thức trừu tượng

Phương thức trở thành


trừu tượng khi phương
thức đó chỉ được void inTT();
ĐỊNH NGHĨA double tinhDienTich();
chứ không được xây
dựng nội dung.
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

V. Lớp trừu tượng


Ngăn cấm việc tạo
ra một đối tượng
Một lớp cha không trực tiếp
có thể trở tham gia vào bài
thành một toán
lớp trừu
tượng vì 2 lý
do Lớp cha chứa
phương thức trừu
tượng
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

V. Lớp trừu tượng

abstract class ConNguoi {


String hoten;
void inTT() {
// in ra HoTen
}
}
abstract class TuGiac {
double diem1, diem2, diem3, diem4;
double tinhDienTich();
}
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

VI. Thực hành


Phân tích và xây dựng bài toán sau:

- Lớp Xe bao gồm: Tốc độ, Biển Số, Hãng Sản Xuất, phương thức nhập/in
thông tin xe
- Lớp Xe Khách kế thừa lớp Xe và bổ sung thêm thông tin Số Hành Khách.

Yêu cầu:
- Xây dựng 2 đối tượng trên
- Có nên ghi đè phương thức in thông tin xe ở lớp Xe Khách không? Tại sao?
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

Đa hình trong Java


I/Định nghĩa
Đa hình là việc triệu gọi phương thức được ghi đè lại của các lớp con từ một phương thức
được định nghĩa trong lớp cha.
VD:
//Lớp hình vuông kế thừa từ tứ giác //Lớp hình chữ nhật kế thừa từ tứ giác
//Lớp tứ giác định nghĩa 1 hành vi tính class HinhVuong extends TuGiac{ class HinhChuNhat extends TuGiac{
diện tích private double doDaiCanh; private double chieuDai, chieuRong;
class TuGiac{ @Override @Override
private Dinh dinh1, dinh2, dinh3, dinh4; public void inTT(){ public void inTT(){
private double chuVi, dienTich; super.inTT(); super.inTT();

public void inTT(){ //in thong tinh do danh canh //in thong tinh chieu dai
} //in thong tinh chieu rong
//in thong tinh 4 dinh } }
//in thong tinh chu vi }
//in thong tinh dien tich
}
}

HỆ THỐNG ĐÀO TẠO CNTT - T3H HÀ NỘI


KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

Đa hình trong Java


I/Ý nghĩa của tính đa hình
Trong nhiều bài toán, chúng ta sử dụng tính đa hình để định nghĩa 1 hành vi dùng chung cho nhiều đối
tượng khác nhau để dễ quản lý.

Giải thích: Như bài toán trong ví dụ trên, ta sử dụng đa hình để định nghĩa 1 hành vi dùng chung là
inTT(), như vậy khi quản lý 1 danh sách các tứ giác (tuGiac1,2,3,….) nếu ta chỉ quan tâm đến hành vi in
thông tin ta sẽ không phân biệt nó là hình vuông hay hình chữ nhật, mà chỉ cần gọi đến 1 hành vi chung
là inTT() như sau:

TuGiac tuGiac1 = new TuGiac();


TuGiac tuGiac2 = new HinhVuong();
TuGiac tuGiac3 = new HinhChuNhat();

 Như vậy, khi ta gọi đến hành vi inTT() thì ta sẽ thấy rõ sự 3 phương thức này hoạt động theo 3 cách
khác nhau hay nói cách khác là nó phản chiếu hình ảnh của 3 đối tượng khác nhau bao gồm TuGiac
(tuGiac1.inTT();), HinhVuong (tuGiac2.inTT();) và HinhChuNhat (tuGiac3.inTT();).

HỆ THỐNG ĐÀO TẠO CNTT - T3H HÀ NỘI


KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

Đa hình trong Java


I/interface là gì?
interface là một keyword trong Java giúp ta định nghĩa 1 bộ hành vi chung cho 1 nhóm đối tượng không
cùng chung bản chất.

II/Tại sao cần interface?


Trong nhiều bài toán, ta không thể sử dụng mối quan hệ kế thừa để xây dựng 1 hành vi dùng chung cho
các lớp con từ 1 lớp cha được.

VD: Chim, Robot đều có hành vi di chuyển, tuy nhiên 2 đối tượng này không có điểm gì chung nhau

 Không thể hình thành 1 lớp cha chung được, do đó, không có cách nào để định nghĩa hay xây dựng
phương thức dùng chung là di chuyển cho cả 2 đối tượng trên.

 DO ĐÓ CHÚNG TA CẦN ĐẾN interface

HỆ THỐNG ĐÀO TẠO CNTT - T3H HÀ NỘI


KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

Đa hình trong Java


I/Cú pháp xây dựng 1 interface
interface <TenBoHanhVi> {
//khai bao cac hanh vi dung chung trong bo hanh vi
}
//Lớp Chim thực hinh bộ hành vi //Lớp RoBot thực thi bộ hành vi
VD DiChuyen DiChuyen
interface DiChuyen{ class Chim implements DiChuyen{ class RoBot implemens DiChuyen{
public void diChuyen(); @Override @Override
} public void diChuyen(){ public void diChuyen(){
//Di chuyen bang 2 chan va //Di chuyen bang dong co
// canh }
} }
}

HỆ THỐNG ĐÀO TẠO CNTT - T3H HÀ NỘI


KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

Đa hình trong Java


I/Từ khóa instanceof
instanceof là một keyword trong Java giúp ta kiểm tra xem một đối tượng A có mang hình dạng của
đối tượng hoặc bộ hành vi B hay không.
VD1: Dùng instanceof trong bài toán Tứ Giác

TuGiac tuGiac1 = new TuGiac();


TuGiac tuGiac2 = new HinhVuong();
TuGiac tuGiac3 = new HinhChuNhat();

boolean ketQua1 = tuGiac1 instanceof TuGiac;


 ketQua1 = true; //Vì tuGiac1 mang hình dạng của đối tượng Tứ Giác

boolean ketQua2 = tuGiac1 instanceof HinhVuong;


 ketQua2 = false; //Vì tuGiac1 không mang hình dạng của đối tượng Hình Vuông

boolean ketQua3 = tuGiac2 instanceof HinhVuong; boolean ketQua4 = tuGiac2 instanceof TuGiac;
 ketQua3 = true; ketQua4 = true; //Vì tuGiac2 hình dạng của đối tượng Hình Vuông và Tứ Giác
HỆ THỐNG ĐÀO TẠO CNTT - T3H HÀ NỘI
KHÓA HỌC JAVA CORE
Biên soạn: GV. Phạm Trung Đoan

Quan hệ phụ thuộc


Học
Lớp
sinh

public class HocSinh{ VD1:


private String ten; public class Lop{
private int tuoi; private HocSinh hocSinh;
public Lop(HocSinh hs){
public HocSinh(){
this.HocSinh=hs;
} }
public void inTTHocSinh(){ public void setHocSinh(HocSinh hs){
System.out.print(“HT:”+ten+” this.hocSinh=hocSinh);
tuoi:”+tuoi); }
} public void inTTLop(){
} hocSinh.inTTHocSinh();
}
}
HỆ THỐNG ĐÀO TẠO CNTT - T3H HÀ NỘI

You might also like