1. Trang chủ
  2. » Luận Văn - Báo Cáo

Da Hinh Trong Java

30 6 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

 Trong lập trình hướng đối tượng, nên lập trình theo cách dùng chung: khai báo 1 biến có kiểu superclass, nó sẽ có thể chấp nhận một giá trị của bất kỳ kiểu subclass nào.  Tuy nhiên[r]

(1)

LẬP TRÌNH JAVA

LẬP TRÌNH JAVA

Bài 10

(2)

Nội dung

Nội dung

 10.1 Upcasting Downcasting

 10.2 Liên kết tĩnh Liên kết động  10.3 Đa hình (Polymophism)

(3)

25/05/21 Bộ Mơn CNPM - ĐHBK Hà Nội 10.1 Upcasting Downcasting

10.1 Upcasting Downcasting

 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ở.

(4)

10.1 Upcasting Downcasting

10.1 Upcasting Downcasting

public class Test1 {

public static void main(String arg[]){ Person p;

Employee e = new Employee(); p = e;

p.setName(“Hoa”);

(5)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội 10.1 Upcasting Downcasting

10.1 Upcasting Downcasting

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); }

(6)

10.1 Upcasting Downcasting

10.1 Upcasting Downcasting

public class Test3 {

String static teamInfo(Person p1, Person p2){ return "Leader: " + p1.getName() +

“, member: " + p2.getName(); }

public static void main(String arg[]){ Employee e1, e2;

Manager m1, m2; //

(7)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội 10.1 Upcasting Downcasting

10.1 Upcasting Downcasting

 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.

(8)

10.1 Upcasting Downcasting

10.1 Upcasting Downcasting

public class Test2 {

public static void main(String arg[]){ Employee e = new Employee();

Person p = e; // up casting

Employee ee = (Employee) p; // down casting Manager m = (Manager) ee; // run-time error

(9)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội Nội dung

Nội dung

 10.1 Upcasting Downcasting

 10.2 Liên kết tĩnh Liên kết động  10.3 Đa hình (Polymophism)

(10)

10.2 Liên kết tĩnh Liên kết động 10.2 Liên kết tĩnh Liên kết động

 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 hiện

(11)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội 11

10.2 Liên kết tĩnh Liên kết động 10.2 Liên kết tĩnh Liên kết động

 Liên kết thời điểm biên dịch

public class Test {

public static void main(String arg[]){ Person p = new Person();

p.setName(“Hoa”);

p.setSalary(350000); //compile-time error }

(12)

10.2 Liên kết tĩnh Liên kết động 10.2 Liên kết tĩnh Liên kết động

 Liên kết động

 Lời gọi phương thức định

thực (run-time), 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  Late binding

(13)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội 13

10.2 Liên kết tĩnh Liên kết động 10.2 Liên kết tĩnh Liên kết động

 Liên kết động

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()); }

(14)

Nội dung

Nội dung

 10.1 Upcasting Downcasting

 10.2 Liên kết tĩnh Liên kết động  10.3 Đa hình (Polymophism)

(15)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội 15

10.3 Đa hình 10.3 Đa hình

 Polymorphism: Nhiều hình thức, nhiều kiểu tồn tại

 Đ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 nhau  Các đối tượng khác giải nghĩa thông điệp

(16)

10.3 Đa hình 10.3 Đa hình

 Khả đối tượng lớp khác đáp ứng thực hành vi khác lớp khác

(17)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội 17

10.3 Đa hình 10.3 Đa hình

 Khả giải nghĩa thông điệp theo các cách thức khác nhau

 Ví dụ:

Person p1 = new Person(); Person p2 = new Employee(); Person p3 = new Manager(); //

(18)

10.3 Đa hình 10.3 Đa hình

class EmployeeList { Employee list[];

public void add(Employee e) { } public void print() {

for (int i=0; i<list.length; i++) { System.out.println(list[i].getDetail());

} }

(19)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội 19

10.3 Đa hình 10.3 Đa hình

 Toán tử instanceof

public class Employee extends Person {} public class Student extends Person {}

public doSomething(Person e) {

if (e instanceof Employee) {

} else if ( e instanceof Student) { ){ } else { }

(20)

Nội dung

Nội dung

 10.1 Upcasting Downcasting

 10.2 Liên kết tĩnh Liên kết động  10.3 Đa hình (Polymophism)

(21)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội 21

10.4 Lập trình tổng quát 10.4 Lập trình tổng quát

 Đa hình thái cho phép phương thức sử dụng chung cho dải rộng tham số đối tượng generic programming.→

 Trong lập trình hướng đối tượng, nên lập trình theo cách dùng chung: khai báo biến có kiểu superclass, chấp nhận giá trị của kiểu subclass nào.

(22)

10.4 Lập trình tổng quát 10.4 Lập trình tổng quát

 Tổng qt hóa chương trình để

hoạt động với kiểu liệu khác nhau, kể kiểu liệu tương lai

 thuật tốn xác định

 Ví dụ:

 C: dùng trỏ void  C++: dùng template

(23)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội 23

10.4 Lập trình tổng quát 10.4 Lập trình tổng qt

 Ví dụ: C dùng trỏ void

 Hàm memcpy:

void* memcpy(void* region1,

const void* region2, size_t n){ const char* first = (const char*)region2;

const char* last = ((const char*)region2) + n;

char* result = (char*)region1; while (first != last)

*result++ = *first++; return result;

(24)

10.4 Lập trình tổng quát 10.4 Lập trình tổng quát

 Ví dụ: C++ dùng template

template<class ItemType>

void sort(ItemType A[], int count ) {

// Sort count items in the array, A, into increasing order // The algorithm that is used here is selection sort

for (int i = count-1; i > 0; i ) { int position_of_max = 0;

for (int j = 1; j <= count ; j++) if (A[j] > A[position_of_max]) position_of_max = j;

ItemType temp = A[count];

Khi sử dụng,có thể thay thế ItemType int, string,… một đối tượng một lớp

(25)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội 25

10.4 Lập trình tổng qt 10.4 Lập trình tổng qt

 Ví dụ Java dùng upcasting class MyStack {

public void push(Object obj) { } public Object pop() { }

}

public class TestStack{

MyStack s = new MyStack(); Point p = new Point();

Circle c = new Circle(); s.push(p); s.push(c);

(26)

10.4 Lập trình tổng quát 10.4 Lập trình tổng quát

 Java 1.5: Template

 Không dùng Template:

List myList = new LinkedList(); myList.add(new Integer(0));

Integer x = (Integer) myList.iterator().next();

 Dùng Template:

(27)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội 27

10.4 Lập trình tổng quát 10.4 Lập trình tổng quát

 Java 1.5: Template – Định nghĩa class MyStack<T> {

public void push(T x) { } public T pop() {

}

(28)

10.4 Lập trình tổng quát 10.4 Lập trình tổng quát

 Java 1.5: Template – Sử dụng

public class Test {

public static void main(String args[]) { MyStack<Integer> s1 = new

MyStack<Integer>();

s1.push(new Integer(0)); Integer x = s1.pop();

(29)

25/05/21 Bộ Môn CNPM - ĐHBK Hà Nội 29

10.4 Lập trình tổng quát 10.4 Lập trình tổng quát

 Chuyển kiểu?

public class Test {

public static void main(String args[]) {

List<String> lst0 = new LinkedList<String>(); //List<Object> lst1 = lst0; Error

//printList(lst0); Error

}

void printList(List<Object> lst) { Iterator it = lst.iterator(); while (it.hasNext())

System.out.println(it.next()); }

(30)

10.4 Lập trình tổng quát 10.4 Lập trình tổng quát

 Wildcards

public class Test {

void printList(List<?> lst) {

Iterator it = lst.iterator(); while (it.hasNext())

System.out.println(it.next()); }

public static void main(String args[]) {

List<String> lst0 = new LinkedList<String>(); List<Object> lst1 = new LinkedList<Object>();

Ngày đăng: 25/05/2021, 11:43

Xem thêm:

w