SlideShare a Scribd company logo
1 of 28
Download to read offline
LẬP TRÌNH HƯỚNG
ĐỐI TƯỢNG
Bài 07. Đa hình
1
IT3100
Nội dung
1. Khái niệm Đa hình (Polymophism)
2. Liên kết tĩnh và Liên kết động
3. Upcasting và Downcasting
4. Đa hình phương thức
2
1/ ĐA HÌNH
3
Khái niệm đa hình
 Polymorphism: nhiều hình thể
 thực hiện một hành động bằng nhiều cách khác nhau
 Ví dụ: Nếu đi du lịch, bạn có thể chọn ô tô, thuyền,
hoặc máy bay
 Dù đi bằng phương tiện gì, kết quả cũng giống nhau là bạn đến được
nơi cần đến
 Cách thức đáp ứng các dịch vụ có thể khác nhau
4
Khái niệm đa hình
 Là khái niệm quan trọng trong OOP
 Là khả năng nhìn nhận đối tượng theo nhiều kiểu khác
nhau: một đối tượng này có khả năng nhập vai thành các
đối tượng khác
 Là khả năng thực hiện một hành động nhưng bằng các
cách khác nhau:
• Nạp chồng phương thức
• Ghi đè phương thức
5
Trừu
tượng
hóa
Đa
hình
Hướng đối tượng
Đóng
gói
Thừa
kế
Khái niệm Liên kết tĩnh – động
 Khi có nhiều phương thức cùng tên, phải xác định
phương thức nào sẽ được thực thi
 Binding: quá trình liên kết lời gọi phương thức tới
đoạn code thực thi phương thức
 Quyết định tại thời điểm biên dịch => Static Binding/Early
Binding/Compile-time Binding
 Quyết định tại thời điểm chạy => Dynamic Binding/Late
binding/Run-time binding
 Khi đó là phương thức nạp chồng
=> xác định phương thức được gọi tại thời điểm biên dịch: thông qua
chữ ký của phương thức
 Khi đó là phương thức khởi tạo
=> xác định phương thức được gọi tại thời điểm biên dịch: thông qua
chữ ký của phương thức
 Khi đó là phương thức ghi đè trong quan hệ thừa kế
=> xác định phương thức được gọi tại thời điểm chạy (do chữ ký là
hoàn toàn giống nhau), dựa trên đối tượng được tham chiếu tới
6
Ví dụ
7
public class Parent{
public void show() {
System.out.println("show from Parent");
}
void display() {
System.out.println("display from Parent");
}
}
public class Child extends Parent{
public void show() {
System.out.println("show from Child");
}
public void display() {
System.out.println("display from Child");
}
}
public class MainClass{
public static void main(String []arg) {
Parent p = new Parent();
p.show();
p.display();
Child ch = new Child();
ch.show();
ch.display();
}
}
2/ UPCASTING VÀ
DOWNCASTING
8
Chuyển đổi kiểu dữ liệu
 Chuyển đổi kiểu dữ liệu nguyên thủy (nhắc lại)
 Java tự động chuyển đổi kiểu khi
• Kiểu dữ liệu tương thích
• Chuyển đổi từ kiểu hẹp hơn sang kiểu rộng hơn
 Phải ép kiểu khi
• Kiểu dữ liệu không tương thích
• Chuyển đổi từ kiểu rộng hơn sang kiểu hẹp hơn
9
Tham chiếu của đối tượng
 Cách duy nhất để truy cập đến một đối tượng là
thông qua biến tham chiếu
 Một biến tham chiếu của kiểu dữ liệu X có thể được gán
cho (tham chiếu tới) một đối tượng có kiểu tương thích
(nằm trên cùng một cây phân cấp kế thừa với X)
 Hai loại chuyển đổi
 Up-casting
 Down-casting
10
Employee e = new Employee();
Biến tham chiếu
Kiểu dữ liệu Đối tượng
Hai loại chuyển đổi
11
https://www.youtube.com/watch?v=58Yhyg8Iw7A&t=1s
Upcasting
Downcasting
Up-casting
 Là khả năng nhìn nhận đối tượng thuộc lớp dẫn xuất như là
một đối tượng thuộc lớp cơ sở.
 Chuyển 1 đối tượng là một thể hiện của lớp con lên thành đối
tượng là thể hiện của lớp cha
 Biến tham chiếu của lớp cha tham chiếu tới đối tượng của lớp
con
 Tự động chuyển đổi trong Java
12
class A{}
class B extends A{}
A a = new B();//day la upcasting
Biến tham chiếu
Kiểu dữ liệu Đối tượng tham chiếu tới
Ví dụ
13
public class Test1 {
public static void main(String arg[]){
Person p;
Employee e = new Employee();
p = e;
p.setName(“Hoa”); // ok
p.setSalary(350000); // compile error
}
Ví dụ
14
• Đối tượng e không bị thay đổi, e vẫn
tồn tại.
• Phép gán p=e cho phép ta gán một
“nhãn” khác cho đối tượng này
• Khi đó p chỉ truy cập được các
phương thức được thừa kế, các
phương thức của riêng lớp con không
thể truy cập.
e
Bộ nhớ Heap
Bộ nhớ Stack
p
Person p;
Employee e = new Employee();
p = e;
Thừa
kế
Upcasting với phương thức ghi đè
 Trong trường hợp phương thức được thừa kế bị
ghi đè:
15
=> runtime binding: Việc quyết định phương thức được gọi dựa
trên bản chất đối tượng được tham chiếu tới, ở đây là Employee.
Phương thức getDetail() của lớp Employee được gọi.
e
p
Thừa
kế
+
ghi
đè
Ví dụ 1
16
class Animal {
public void eat() { System.out.println("eating..."); }
}
public class Cat extends Animal {
public void meow(){ System.out.println("meowing..."); }
}
public class Upcasting {
public static void main(String[] args) {
Cat cat = new Cat();
Animal animal1 = cat; // Tự động chuyển kiểu
Animal animal2 = (Animal) cat; // Chuyển kiểu TM
cat.eat();
cat.meow();
animal1.eat();
animal2.eat();
animal2.meow();
}
}
https://gpcoder.com/
Ví dụ 2
17
public class Cat extends Animal {
@Override phương thức eat của lớp Animal
public void eat() {
System.out.println("Eat meat");
}
public void meow() {
System.out.println("meowing...");
}
}
Lời gọi từ hàm main()
cat.eat();
cat.meow();
animal1.eat();
animal2.eat();
Đa hình tại runtime với upcasting
18
class Bike{
void run(){
System.out.println("dang chay");
}
}
class Splender extends Bike{
void run(){
System.out.println("chay an toan voi 60km");
}
public static void main(String args[]){
Bike b = new Splender();
b.run();
}
}
1. biến tham chiếu của lớp cha
gọi phương thức run
2. biến tham chiếu đang
tham chiếu tới đối tượng
của lớp con
3. phương thức lớp con ghi
đè phương thức của lớp cha
4.phương thức của lớp con
được gọi tại runtime
Đa hình tại runtime với upcasting (2)
 Đa hình tại runtime không hoạt động với thuộc tính
(kể cả bị ghi đè)
19
class Bike{
int speedlimit=90;
}
class Honda3 extends Bike{
int speedlimit=150;
}
public static void main(String args[]){
Bike obj=new Honda3();
System.out.println(obj.speedlimit);
}
Down-casting
 Là khả năng nhìn nhận một đối tượng thuộc lớp
cơ sở như một đối tượng thuộc lớp dẫn xuất.
 Chuyển 1 đối tượng là một thể hiện của lớp cha
xuống thành đối tượng là thể hiện của lớp con
 Không tự động chuyển đổi kiểu
 không phải mọi thể hiện của lớp cơ sở đều là thể hiện của
lớp dẫn xuất => cần chuyển đổi tường minh
20
Down-casting
21
// Compile error: Yêu cầu chuyển đổi tường minh
// Runtime error:
// yêu cầu JVM thực hiện chuyển kiểu
// JVM phát hiện Kiểu của animal lúc chạy là Animal
// animal không thực là một Dog
// Is Animal a Dog? No it isn't - it cannot be cast.
// => báo lỗi ClassCastException
// Upcasting
// Compile error: Yêu cầu chuyển đổi tường minh
// "Type mismatch: cannot convert from Animal to Dog"
// Upcasting
// Downcasting Tường minh => OK
// Khi upcasting: che dấu các thuộc tính của Dog
// Khi Downcasting: quay lại sử dụng được các thuộc
// tính này
Down-casting
 Để tránh lỗi ClassCastException => cần kiểm tra một đối tượng
có phải là thể hiện của một kiểu dữ liệu tương thích không ! =>
sử dụng instanceof
22
public class Dog extends Animal
static void check(Object obj) {
if (obj instanceof Dog) {
Dog dog = (Dog) obj; // downcasting
System.out.println("ok downcasting performed");
} else {
System.out.println("obj is not instance of Dog");
}
}
Animal dog = new Dog();
Dog.check(dog);
Object obj = new Rectangle();
Dog.check(obj);
 Nguyên tắc: một đối tượng A chỉ được tham
chiếu tới bởi các biến tham chiếu kiểu A, hoặc
biến tham chiếu có kiểu là các lớp cha của A.
Ngược lại sẽ bị lỗi (lớp con của A, lớp không
có quan hệ tới A)
23
Ví dụ
24
public class Parent{
public void show() {
System.out.println("show from Parent");
}
void display() {
System.out.println("display from Parent");
}
}
public class Child extends Parent{
public void display() {
System.out.println("display from Child");
}
public void xyz() {
System.out.println("Child's Method");
}
}
public class MainClass{
public static void main(String []arg) {
//Upcasting
Parent p = new Child();
p.show();
p.display();
p.xyz();
//Downcasting
Child ch = (Child) p;
ch.show();
ch.display();
ch.xyz();
}
}
Ưu điểm của sử dụng Upcasting
25
public abstract class Animal{
public abstract String speak();
}
public class Dog extends Animal{
public String speak() {
return "The dog says woof!";
}
}
public class Fox extends Animal{
public String speak() {
return "What does the fox say?";
}
}
public class Cow extends Animal{
public String speak() {
return "The cow goes moo!";
}
}
public class MainClass{
public static void main(String []arg) {
Animal[] animalArray = new Animal[3];
animalArray[0] = new Dog();
animalArray[1] = new Fox();
animalArray[2] = new Cow();
// Print out the array
for(int i = 0; i < animalArray.length; i++) {
System.out.println(animalArray[i].speak());
}
}
}
Bài tập 1
 Kiểm tra các đoạn mã sau đây và vẽ sơ đồ
lớp tương ứng
26
Bài tập 2
 Giải thích các đầu ra (hoặc các lỗi nếu có)
cho chương trình thử nghiệm sau:
27
Bài tập 3
 Phân tích xây dựng các lớp như mô tả sau:
 Hàng điện máy <mã hàng, tên hàng, nhà sản xuất, giá, thời
gian bảo hành, điện áp, công suất>
 Hàng sành sứ < mã hàng, tên hàng, nhà sản xuất, giá, loại
nguyên liệu>
 Hàng thực phẩm <mã hàng, tên hàng, nhà sản xuất, giá,
ngày sản xuất, ngày hết hạn dùng>
 Viết chương trình tạo mỗi loại một mặt hàng cụ
thể. Xuất thông tin về các mặt hàng này.
28

More Related Content

What's hot

Bai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaileBai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaileNhuận Lê Văn
 
Oop unit 07 các kỹ thuật kế thừa
Oop unit 07 các kỹ thuật kế thừaOop unit 07 các kỹ thuật kế thừa
Oop unit 07 các kỹ thuật kế thừaTráng Hà Viết
 
Oop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớpOop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớpTráng Hà Viết
 
Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )
Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )
Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )Đông Lương
 
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPTBài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPTMasterCode.vn
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátTráng Hà Viết
 
Oop unit 03 xây dựng lớp
Oop unit 03 xây dựng lớpOop unit 03 xây dựng lớp
Oop unit 03 xây dựng lớpTráng Hà Viết
 
Oop unit 05 một số kỹ thuật java nâng cao
Oop unit 05 một số kỹ thuật java nâng caoOop unit 05 một số kỹ thuật java nâng cao
Oop unit 05 một số kỹ thuật java nâng caoTráng Hà Viết
 
[Cntt] bài giảng lập trình java bkhcm
[Cntt] bài giảng lập trình java   bkhcm[Cntt] bài giảng lập trình java   bkhcm
[Cntt] bài giảng lập trình java bkhcmHong Phuoc Nguyen
 
Ket tap, ke thua
Ket tap, ke thuaKet tap, ke thua
Ket tap, ke thuaTuan Do
 
Oop unit 13 tổng quan về uml
Oop unit 13 tổng quan về umlOop unit 13 tổng quan về uml
Oop unit 13 tổng quan về umlTráng Hà Viết
 
Oop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượngOop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượngTráng Hà Viết
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituongMinh Ngoc Tran
 

What's hot (20)

Bai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaileBai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaile
 
Bai08 10 java_fx
Bai08 10 java_fxBai08 10 java_fx
Bai08 10 java_fx
 
Oop unit 07 các kỹ thuật kế thừa
Oop unit 07 các kỹ thuật kế thừaOop unit 07 các kỹ thuật kế thừa
Oop unit 07 các kỹ thuật kế thừa
 
Oop unit 06 kế thừa
Oop unit 06 kế thừaOop unit 06 kế thừa
Oop unit 06 kế thừa
 
Oop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớpOop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớp
 
Oop unit 08 đa hình
Oop unit 08 đa hìnhOop unit 08 đa hình
Oop unit 08 đa hình
 
Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )
Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )
Lập Trình Hướng Đối Tượng trong Java ( Vietnamese )
 
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPTBài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quát
 
Oop 2
Oop 2Oop 2
Oop 2
 
Oop unit 03 xây dựng lớp
Oop unit 03 xây dựng lớpOop unit 03 xây dựng lớp
Oop unit 03 xây dựng lớp
 
Oop unit 05 một số kỹ thuật java nâng cao
Oop unit 05 một số kỹ thuật java nâng caoOop unit 05 một số kỹ thuật java nâng cao
Oop unit 05 một số kỹ thuật java nâng cao
 
[Cntt] bài giảng lập trình java bkhcm
[Cntt] bài giảng lập trình java   bkhcm[Cntt] bài giảng lập trình java   bkhcm
[Cntt] bài giảng lập trình java bkhcm
 
Oop unit 02 java cơ bản
Oop unit 02 java cơ bảnOop unit 02 java cơ bản
Oop unit 02 java cơ bản
 
Ket tap, ke thua
Ket tap, ke thuaKet tap, ke thua
Ket tap, ke thua
 
Oop unit 13 tổng quan về uml
Oop unit 13 tổng quan về umlOop unit 13 tổng quan về uml
Oop unit 13 tổng quan về uml
 
On thitotnghiep
On thitotnghiepOn thitotnghiep
On thitotnghiep
 
Java Tieng Viet
Java Tieng VietJava Tieng Viet
Java Tieng Viet
 
Oop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượngOop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượng
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituong
 

Recently uploaded

Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoámyvh40253
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfTrnHoa46
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líDr K-OGN
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................TrnHoa46
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...hoangtuansinh1
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...Nguyen Thanh Tu Collection
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...Nguyen Thanh Tu Collection
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhvanhathvc
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfVyTng986513
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdfTrnHoa46
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...ThunTrn734461
 
powerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxpowerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxAnAn97022
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 

Recently uploaded (20)

1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdf
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
 
powerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxpowerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptx
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 

Bai07 da hinh

  • 1. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 07. Đa hình 1 IT3100
  • 2. Nội dung 1. Khái niệm Đa hình (Polymophism) 2. Liên kết tĩnh và Liên kết động 3. Upcasting và Downcasting 4. Đa hình phương thức 2
  • 4. Khái niệm đa hình  Polymorphism: nhiều hình thể  thực hiện một hành động bằng nhiều cách khác nhau  Ví dụ: Nếu đi du lịch, bạn có thể chọn ô tô, thuyền, hoặc máy bay  Dù đi bằng phương tiện gì, kết quả cũng giống nhau là bạn đến được nơi cần đến  Cách thức đáp ứng các dịch vụ có thể khác nhau 4
  • 5. Khái niệm đa hình  Là khái niệm quan trọng trong OOP  Là khả năng nhìn nhận đối tượng theo nhiều kiểu khác nhau: một đối tượng này có khả năng nhập vai thành các đối tượng khác  Là khả năng thực hiện một hành động nhưng bằng các cách khác nhau: • Nạp chồng phương thức • Ghi đè phương thức 5 Trừu tượng hóa Đa hình Hướng đối tượng Đóng gói Thừa kế
  • 6. Khái niệm Liên kết tĩnh – động  Khi có nhiều phương thức cùng tên, phải xác định phương thức nào sẽ được thực thi  Binding: quá trình liên kết lời gọi phương thức tới đoạn code thực thi phương thức  Quyết định tại thời điểm biên dịch => Static Binding/Early Binding/Compile-time Binding  Quyết định tại thời điểm chạy => Dynamic Binding/Late binding/Run-time binding  Khi đó là phương thức nạp chồng => xác định phương thức được gọi tại thời điểm biên dịch: thông qua chữ ký của phương thức  Khi đó là phương thức khởi tạo => xác định phương thức được gọi tại thời điểm biên dịch: thông qua chữ ký của phương thức  Khi đó là phương thức ghi đè trong quan hệ thừa kế => xác định phương thức được gọi tại thời điểm chạy (do chữ ký là hoàn toàn giống nhau), dựa trên đối tượng được tham chiếu tới 6
  • 7. Ví dụ 7 public class Parent{ public void show() { System.out.println("show from Parent"); } void display() { System.out.println("display from Parent"); } } public class Child extends Parent{ public void show() { System.out.println("show from Child"); } public void display() { System.out.println("display from Child"); } } public class MainClass{ public static void main(String []arg) { Parent p = new Parent(); p.show(); p.display(); Child ch = new Child(); ch.show(); ch.display(); } }
  • 9. Chuyển đổi kiểu dữ liệu  Chuyển đổi kiểu dữ liệu nguyên thủy (nhắc lại)  Java tự động chuyển đổi kiểu khi • Kiểu dữ liệu tương thích • Chuyển đổi từ kiểu hẹp hơn sang kiểu rộng hơn  Phải ép kiểu khi • Kiểu dữ liệu không tương thích • Chuyển đổi từ kiểu rộng hơn sang kiểu hẹp hơn 9
  • 10. Tham chiếu của đối tượng  Cách duy nhất để truy cập đến một đối tượng là thông qua biến tham chiếu  Một biến tham chiếu của kiểu dữ liệu X có thể được gán cho (tham chiếu tới) một đối tượng có kiểu tương thích (nằm trên cùng một cây phân cấp kế thừa với X)  Hai loại chuyển đổi  Up-casting  Down-casting 10 Employee e = new Employee(); Biến tham chiếu Kiểu dữ liệu Đối tượng
  • 11. Hai loại chuyển đổi 11 https://www.youtube.com/watch?v=58Yhyg8Iw7A&t=1s Upcasting Downcasting
  • 12. Up-casting  Là khả năng nhìn nhận đối tượng thuộc lớp dẫn xuất như là một đối tượng thuộc lớp cơ sở.  Chuyển 1 đối tượng là một thể hiện của lớp con lên thành đối tượng là thể hiện của lớp cha  Biến tham chiếu của lớp cha tham chiếu tới đối tượng của lớp con  Tự động chuyển đổi trong Java 12 class A{} class B extends A{} A a = new B();//day la upcasting Biến tham chiếu Kiểu dữ liệu Đối tượng tham chiếu tới
  • 13. Ví dụ 13 public class Test1 { public static void main(String arg[]){ Person p; Employee e = new Employee(); p = e; p.setName(“Hoa”); // ok p.setSalary(350000); // compile error }
  • 14. Ví dụ 14 • Đối tượng e không bị thay đổi, e vẫn tồn tại. • Phép gán p=e cho phép ta gán một “nhãn” khác cho đối tượng này • Khi đó p chỉ truy cập được các phương thức được thừa kế, các phương thức của riêng lớp con không thể truy cập. e Bộ nhớ Heap Bộ nhớ Stack p Person p; Employee e = new Employee(); p = e; Thừa kế
  • 15. Upcasting với phương thức ghi đè  Trong trường hợp phương thức được thừa kế bị ghi đè: 15 => runtime binding: Việc quyết định phương thức được gọi dựa trên bản chất đối tượng được tham chiếu tới, ở đây là Employee. Phương thức getDetail() của lớp Employee được gọi. e p Thừa kế + ghi đè
  • 16. Ví dụ 1 16 class Animal { public void eat() { System.out.println("eating..."); } } public class Cat extends Animal { public void meow(){ System.out.println("meowing..."); } } public class Upcasting { public static void main(String[] args) { Cat cat = new Cat(); Animal animal1 = cat; // Tự động chuyển kiểu Animal animal2 = (Animal) cat; // Chuyển kiểu TM cat.eat(); cat.meow(); animal1.eat(); animal2.eat(); animal2.meow(); } } https://gpcoder.com/
  • 17. Ví dụ 2 17 public class Cat extends Animal { @Override phương thức eat của lớp Animal public void eat() { System.out.println("Eat meat"); } public void meow() { System.out.println("meowing..."); } } Lời gọi từ hàm main() cat.eat(); cat.meow(); animal1.eat(); animal2.eat();
  • 18. Đa hình tại runtime với upcasting 18 class Bike{ void run(){ System.out.println("dang chay"); } } class Splender extends Bike{ void run(){ System.out.println("chay an toan voi 60km"); } public static void main(String args[]){ Bike b = new Splender(); b.run(); } } 1. biến tham chiếu của lớp cha gọi phương thức run 2. biến tham chiếu đang tham chiếu tới đối tượng của lớp con 3. phương thức lớp con ghi đè phương thức của lớp cha 4.phương thức của lớp con được gọi tại runtime
  • 19. Đa hình tại runtime với upcasting (2)  Đa hình tại runtime không hoạt động với thuộc tính (kể cả bị ghi đè) 19 class Bike{ int speedlimit=90; } class Honda3 extends Bike{ int speedlimit=150; } public static void main(String args[]){ Bike obj=new Honda3(); System.out.println(obj.speedlimit); }
  • 20. Down-casting  Là khả năng nhìn nhận một đối tượng thuộc lớp cơ sở như một đối tượng thuộc lớp dẫn xuất.  Chuyển 1 đối tượng là một thể hiện của lớp cha xuống thành đối tượng là thể hiện của lớp con  Không tự động chuyển đổi kiểu  không phải mọi thể hiện của lớp cơ sở đều là thể hiện của lớp dẫn xuất => cần chuyển đổi tường minh 20
  • 21. Down-casting 21 // Compile error: Yêu cầu chuyển đổi tường minh // Runtime error: // yêu cầu JVM thực hiện chuyển kiểu // JVM phát hiện Kiểu của animal lúc chạy là Animal // animal không thực là một Dog // Is Animal a Dog? No it isn't - it cannot be cast. // => báo lỗi ClassCastException // Upcasting // Compile error: Yêu cầu chuyển đổi tường minh // "Type mismatch: cannot convert from Animal to Dog" // Upcasting // Downcasting Tường minh => OK // Khi upcasting: che dấu các thuộc tính của Dog // Khi Downcasting: quay lại sử dụng được các thuộc // tính này
  • 22. Down-casting  Để tránh lỗi ClassCastException => cần kiểm tra một đối tượng có phải là thể hiện của một kiểu dữ liệu tương thích không ! => sử dụng instanceof 22 public class Dog extends Animal static void check(Object obj) { if (obj instanceof Dog) { Dog dog = (Dog) obj; // downcasting System.out.println("ok downcasting performed"); } else { System.out.println("obj is not instance of Dog"); } } Animal dog = new Dog(); Dog.check(dog); Object obj = new Rectangle(); Dog.check(obj);
  • 23.  Nguyên tắc: một đối tượng A chỉ được tham chiếu tới bởi các biến tham chiếu kiểu A, hoặc biến tham chiếu có kiểu là các lớp cha của A. Ngược lại sẽ bị lỗi (lớp con của A, lớp không có quan hệ tới A) 23
  • 24. Ví dụ 24 public class Parent{ public void show() { System.out.println("show from Parent"); } void display() { System.out.println("display from Parent"); } } public class Child extends Parent{ public void display() { System.out.println("display from Child"); } public void xyz() { System.out.println("Child's Method"); } } public class MainClass{ public static void main(String []arg) { //Upcasting Parent p = new Child(); p.show(); p.display(); p.xyz(); //Downcasting Child ch = (Child) p; ch.show(); ch.display(); ch.xyz(); } }
  • 25. Ưu điểm của sử dụng Upcasting 25 public abstract class Animal{ public abstract String speak(); } public class Dog extends Animal{ public String speak() { return "The dog says woof!"; } } public class Fox extends Animal{ public String speak() { return "What does the fox say?"; } } public class Cow extends Animal{ public String speak() { return "The cow goes moo!"; } } public class MainClass{ public static void main(String []arg) { Animal[] animalArray = new Animal[3]; animalArray[0] = new Dog(); animalArray[1] = new Fox(); animalArray[2] = new Cow(); // Print out the array for(int i = 0; i < animalArray.length; i++) { System.out.println(animalArray[i].speak()); } } }
  • 26. Bài tập 1  Kiểm tra các đoạn mã sau đây và vẽ sơ đồ lớp tương ứng 26
  • 27. Bài tập 2  Giải thích các đầu ra (hoặc các lỗi nếu có) cho chương trình thử nghiệm sau: 27
  • 28. Bài tập 3  Phân tích xây dựng các lớp như mô tả sau:  Hàng điện máy <mã hàng, tên hàng, nhà sản xuất, giá, thời gian bảo hành, điện áp, công suất>  Hàng sành sứ < mã hàng, tên hàng, nhà sản xuất, giá, loại nguyên liệu>  Hàng thực phẩm <mã hàng, tên hàng, nhà sản xuất, giá, ngày sản xuất, ngày hết hạn dùng>  Viết chương trình tạo mỗi loại một mặt hàng cụ thể. Xuất thông tin về các mặt hàng này. 28