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

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 624,5 KB

Nội dung

 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

w