Professional Documents
Culture Documents
Bai 08 - Da Hinh
Bai 08 - Da Hinh
1 2
3 4
3 4
1
1. Upcasting và Downcasting 1. Upcasting và Downcasting
v Chuyển đổi kiểu dữ liệu nguyên thủy v Chuyển đổi kiểu dữ liệu tham chiếu
§ Java tự động chuyển đổi kiểu khi § Kiểu dữ liệu tham chiếu có thể được chuyển đổi kiểu
• Kiểu dữ liệu tương thích khi
• Chuyển đổi từ kiểu hẹp hơn sang kiểu rộng hơn • Kiểu dữ liệu tham chiếu (lớp) tương thích A
int i; • Nằm trên cùng một cây phân cấp kế thừa
double d = i; A var1 = new B();
§ Phải ép kiểu khi
• Kiểu dữ liệu không tương thích A var1 = new A();
• Chuyển đổi từ kiểu rộng hơn sang kiểu hẹp hơn C var2 = (C)var1; B
int i; § Hai loại chuyển đổi
byte b = i; byte b = (byte)i;
• Up-casFng
• Down-casFng
5 6
5 6
lớp dẫn xuất như là một đối tượng thuộc lớp cơ + getDetails(): String
7 8
7 8
2
Ví dụ Upcasting Person
Ví dụ Upcasting Person
class Manager extends Employee { - name: String public class Test3 { - name: String
Employee assistant; - birthday: Date String static teamInfo(Person p1, - birthday: Date
// ... + setName(String) Person p2) { + setName(String)
public void setAssistant(Employee e) { + setBirthday(Date) return "Leader: " + p1.getName() + + setBirthday(Date)
assistant = e; + getDetails(): String ", member: " + p2.getName(); + getDetails(): String
} }
// ... public static void main(String arg[]) {
} Employee Employee e1, e2; Employee
public class Test2 { - salary: double Manager m1, m2; - salary: double
+ getDetails():String + getDetails():String
9 10
9 10
11 12
3
Toán tử instanceof Nội dung
v Kiểm tra xem một đối tượng có phải là thể hiện của một 1. Upcas/ng và Downcas/ng
lớp nào đó không
v Trả về: true | false (nếu đối tượng là null thì trả về false) 2. Liên kết 8nh và Liên kết động
3. Đa hình (Polymorphism)
public class Employee extends Person {}
public class Student extends Person {} 4. Ví dụ và bài tập
public class Test{
public doSomething(Person e) {
if (e instanceof Employee) {...
} else if (e instanceof Student) {...
} else {...
}
}
}
13 14
13 14
Liên kết lời gọi hàm Trong ngôn ngữ Hướng đối tượng
v Liên kết lời gọi hàm (func/on call binding) là quy v Liên kết lời gọi phương thức (method call
trình xác định khối mã hàm cần chạy khi một lời binding): quá trình liên kết lời gọi phương thức tới
gọi hàm được thực hiện đoạn code thực thi phương thức
§ Ví dụ xử lý liên kết lời gọi hàm trong C: đơn giản vì mỗi v Có 2 loại:
hàm có duy nhất một tên § Liên kết Lnh (staFc binding)
§ Liên kết động (dynamic binding)
15 16
15 16
4
2.1 Liên kết tĩnh Ví dụ liên kết tĩnh trong Java
v Liên kết tại thời điểm biên dịch class Human {
public static void walk() {
§ Early Binding/Compile-`me Binding }
System.out.println("Human walks");
§ Lời gọi phương thức được quyết định khi biên dịch, do }
public class Boy extends Human {
đó chỉ có một phiên bản của phương thức được thực public static void walk() {
System.out.println("Boy walks");
hiện }
§ Nếu có lỗi thì sẽ có lỗi biên dịch public static void main(String args[]) {
// Reference is of Human type and object is Boy type
§ Ưu điểm về tốc độ Human obj1 = new Boy();
v Ví dụ trong Java: các phương thức sta/c // Reference is of Human type and object is Human type.
Human obj2 = new Human();
// Reference is of Human type and object is Human type.
Boy obj3 = new Boy();
obj1.walk();
obj2.walk();
obj3.walk();
obj1 = obj3;
obj1.walk();
}
}
17 18
17 18
pArr[i].getDetail());
}
Manager
}
- assistant: Employee
}
+ setAssistant(Employee)
+ getDetails():String
19 20
19 20
5
Bài tập 1 Nội dung
1. Upcas<ng và Downcas<ng
v Giả sử lớp Sub kế thừa từ lớp cha Sandwich. Tạo hai đối tượng 2. Liên kết Lnh và Liên kết động
từ các lớp này:
Sandwich x = new Sandwich(); 3. Đa hình (Polymorphism)
Sub y = new Sub(); 4. Ví dụ và bài tập
v Phép gán nào sau đây là hợp lệ?
1. x = y;
2. y = x;
3. y = new Sandwich();
4. x = new Sub();
21 22
21 22
23 24
23 24
6
3. Đa hình 3. Đa hình Person
v Polymorphism: Nhiều hình thức thực hiện, nhiều - name: String
kiểu tồn tại v Nhìn nhận đối tượng theo nhiều kiểu khác
- birthday: Date
+ setName(String)
§ Khả năng của một biến tham chiếu thay đổi hành nhau à Upcasting và Downcasting + setBirthday(Date)
vi theo đối tượng mà nó đang tham chiếu tới
+ getDetails(): String
v Đa hình trong lập trình public class Test3 {
§ Đa hình phương thức: public static void main(String
args[]){ Employee
• Phương thức trùng tên, phân biệt bởi danh sách tham số.
Person p1 = new Employee(); - salary: double
§ Đa hình đối tượng
Person p2 = new Manager(); + setSalary(double)
• Nhìn nhận đối tượng theo nhiều kiểu khác nhau + getDetails(): String
• Các đối tượng khác nhau cùng đáp ứng chung danh sách các
thông điệp có giải nghĩa thông điệp theo cách thức khác Employee e = (Employee) p1;
nhau. Manager m = (Manager) p2; Manager
} - assistant: Employee
} + setAssistant(Employee)
+ getDetails():String
25 26
25 26
điệp theo các cách thức khác nhau à Liên kết v Các đối tượng khác nhau giải nghĩa
- birthday: Date
động + setName(String)
các thông điệp theo các cách thức + setBirthday(Date)
v Ví dụ: khác nhau + getDetails(): String
System.out.println(p1.getDetail()); System.out.println(p1.getDetail());
System.out.println(p2.getDetail()); System.out.println(p2.getDetail()); Manager
System.out.println(p3.getDetail());
System.out.println(p3.getDetail()); - assistant: Employee
+ setAssistant(Employee)
+ getDetails():String
27 28
27 28
7
Toán tử instanceof Nội dung
public class Employee extends Person {} 1. Upcas<ng và Downcas<ng
public class Student extends Person {} 2. Liên kết Lnh và Liên kết động
3. Đa hình (Polymorphism)
public class Test{
4. Ví dụ và bài tập
public doSomething(Person e) {
if (e instanceof Employee) {...
} else if (e instanceof Student) {...
){
} else {...}
}
}
29 32
29 32
v Cho v Những điều kiện nào trả về true? (Có thể xem Java
biểu đồ lớp: documentation để biết các quan hệ thừa kế giữa các lớp)
Biết rằng System.out là một đối tượng của lớp PrintStream.
1. System.out instanceof PrintStream
2. System.out instanceof OutputStream
3. System.out instanceof LogStream
4. System.out instanceof Object
5. System.out instanceof String
Phương thức printLine() của lớp nào sẽ được sử dụng trong mỗi trường hợp dưới đây, biết 6. System.out instanceof Writer
rằng z là một đối tượng của lớp F? Giải thích ngắn gọn?
1. z.printLine(1)
2. z.printLine(2, "Object-Oriented Programming")
3. z.printLine("Java")
4. z.printLine("Object-Oriented Programming", "Java")
5. z.printLine("Object-Oriented Programming", 3)
33 34
33 34
8
Bài tập 4 Bài tập 5
v Kiểm tra các đoạn mã sau đây và vẽ sơ đồ v Giải thích các đầu ra (hoặc các lỗi nếu có)
lớp tương ứng cho chương trình thử nghiệm sau:
35 36
35 36
PhongBan NhanVien
Bài tập 6 - tenPhongBan: String - tenNhanVien: String
1 1..*
v Phân tích xây dựng các lớp như mô tả sau: - soNhanVien: int + LUONG_MAX: double
+ SO_NV_MAX: int + tinhLuong(): double
§ Hàng điện máy <mã hàng, tên hàng, nhà sản xuất, giá, thời
+ themNV(NhanVien): + inThongTin()
gian bảo hành, điện áp, công suất> boolean
§ Hàng sành sứ < mã hàng, tên hàng, nhà sản xuất, giá, loại + xoaNV(): NhanVien
nguyên liệu> + tinhTongLuong(): double
NhanVienCoHuu NhanVienHopDong
§ Hàng thực phẩm <mã hàng, tên hàng, nhà sản xuất, giá, + inThongTin() - luongCoBan: double - luongHopDong: double
ngày sản xuất, ngày hết hạn dùng> - heSoLuong: double + tinhLuong(): double
v Viết chương trình tạo mỗi loại một mặt hàng cụ Bài tập 7 + tinhLuong(): double + inThongTin()
thể. Xuất thông tin về các mặt hàng này. v Xây dựng các lớp như biểu
+ tangHeSoLuong(double):
boolean
đồ ở hình bên + inThongTin()
§ Tính tổng lương của tất
cả nhân viên trong
phòng ban
TruongPhong
- phuCap: double
- soNamDuongChuc: int
+ tinhLuong(): double
37 38
+ inThongTin()
37 38
9
40
40
10