1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình hướng đối tượng: Bài 8 - ThS. Trịnh Thành Trung

26 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 476,71 KB

Nội dung

Bài giảng Lập trình hướng đối tượng - Bài 8: Đa hình cung cấp cho người học các kiến thức: Upcasting và downcasting, đa hình, liên kết tĩnh và liên kết động. Mời các bạn cùng tham khảo nội dung chi tiết.

Bài Đa hình Trịnh Thành Trung trungtt@soict.hust.edu.vn Nội dung Upcasting downcasting Đa hình Liên kết tĩnh liên kết động Up-casting down-casting Chuyển đổi kiểu liệu đối tượng Chuyển đổi kiểu liệu nguyên thủy • Java tự động chuyển đổi kiểu − Kiểu liệu tương thích − Chuyển đổi từ kiểu hẹp sang kiểu rộng int i; double d = i; • Phải ép kiểu − Kiểu liệu tương thích − Chuyển đổi từ kiểu rộng sang kiểu hẹp int i; byte b = i; byte b = (byte)i; Chuyển đổi kiểu liệu tham chiếu • Kiểu liệu tham chiếu chuyển đổi kiểu A • Kiểu liệu tham chiếu (lớp) tương thích • Nằm phân cấp kế thừa • Hai cách chuyển đổi B • Up-casting • Down-casting C Up-casting • Up casting: lên phân cấp thừa kế (moving up the inheritance hierarchy) • Up casting khả nhìn nhận đối tượng thuộc lớp dẫn xuất đối tượng thuộc lớp sở • Tự động chuyển đổi kiểu Ví dụ public class Test1 { public static void main(String arg[]) { Employee e = new Employee(); Person p; p = e; p.setName(“Hoa”); p.setSalary(350000); // compile error } Person - name: String - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Person Ví dụ - name: String - birthday: Date + setName(String) + setBirthday(Date) class Manager extends Employee { Employee assistant; // public void setAssistant(Employee e) { assistant = e; } // } public class Test2 { public static void main(String arg[]) { Manager junior, senior; // senior.setAssistant(junior); } } + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String Person Ví dụ - name: String - birthday: Date + setName(String) + setBirthday(Date) public class Test3 { String static teamInfo(Person p1, Person p2) { return "Leader: " + p1.getName() + ", member: " + p2.getName(); } + getDetails(): String Employee - salary: double + setSalary(double) public static void main(String arg[]) { Employee e1, e2; Manager m1, m2; // System.out.println(teamInfo(e1, e2)); System.out.println(teamInfo(m1, m2)); System.out.println(teamInfo(m1, e2)); } } + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String Down-casting • Down casting: xuống phân cấp thừa kế (move back down the inheritance hierarchy) • Down casting khả nhìn nhận đối tượng thuộc lớp sở đối tượng thuộc lớp dẫn xuất • Không tự động chuyển đổi kiểu  Phải ép kiểu 10 Liên kết tĩnh liên kết động Static binding & dynamic binding Liên kết lời gọi hàm • Liên kết lời gọi hàm (function call binding) quy trình xác định khối mã hàm cần chạy lời gọi hàm thực • C: đơn giản hàm có tên • C++: chồng hàm, phân tích chữ ký kiểm tra danh sách tham số 13 Trong ngơn ngữ HĐT • Liên kết lời gọi phương thức • Đối với lớp độc lập (khơng thuộc thừa kế nào), quy trình gần không khác với function call binding − so sánh tên phương thức, danh sách tham số để tìm định nghĩa tương ứng − số tham số tham số ẩn: trỏ this 14 Liên kết tĩnh • Liên kết thời điểm biên dịch − Early Binding/Compile-time Binding − Lời gọi phương thức định biên dịch, có phiên phương thức thực − Nếu có lỗi có lỗi biên dịch − Ưu điểm tốc độ • C/C++ function call binding, C++ method binding ví dụ liên kết tĩnh (static function call binding) 15 Liên kết động • Lời gọi phương thức định thực (run-time) − Late binding/Run-time binding − Phiên phương thức phù hợp với đối tượng gọi − Java mặc định sử dụng liên kết động 16 Person Ví dụ - name: String - birthday: Date + setName(String) + setBirthday(Date) public class Test { public static void main(String arg[]){ Person p = new Person(); // Employee e = new Employee(); // Manager m = new Manager(); // Person pArr[] = {p, e, m}; for (int i=0; i< pArr.length; i++){ System.out.println( pArr[i].getDetail()); } } } + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String 17 Đa hình Polymorphism Đa hình • Polymorphism: Nhiều hình thức thực hiện, nhiều kiểu tồn • Đa hình lập trình − Đa hình phương thức: + Phương thức trùng tên, phân biệt danh sách tham số − Đa hình đối tượng + Nhìn nhận đối tượng theo nhiều kiểu khác + Các đối tượng khác đáp ứng chung danh sách thơng điệp có giải nghĩa thơng điệp theo cách thức khác 19 Person Ví dụ - name: String - birthday: Date + setName(String) • Các đối tượng khác giải nghĩa thông điệp theo cách thức khác • Liên kết động (Java) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) Person p1 = new Person(); Person p2 = new Employee(); Person p3 = new Manager(); // System.out.println(p1.getDetail()); System.out.println(p2.getDetail()); System.out.println(p3.getDetail()); + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String 20 Person Ví dụ - name: String - birthday: Date + setName(String) + setBirthday(Date) class EmployeeList { Employee list[]; public void add(Employee e) { } public void print() { for (int i=0; i

Ngày đăng: 09/05/2021, 18:02