CT176 chapter3 inheritance polymorphism tủ tài liệu bách khoa

56 49 0
CT176 chapter3 inheritance polymorphism tủ tài liệu bách khoa

Đ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

Chapter Thừa kế đa hình CT176 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Mục tiêu Chương nhằm giới thiệu tính thừa kế tính đa hình Java CT176 – Lập trình Hướng đối tượng Nội dung • Thừa kế    Thừa kế gì? Thừa kế Java Hàm xây dựng thừa kế • Đa hình    Nạp đè phương thức Đa hình Ứng dụng tính đa hình • Lớp trừu tượng & Phương thức trừu tượng • Đa thừa kế (multiple inheritance) • Giao diện (interface) CT176 – Lập trình Hướng đối tượng Thừa kế gì? CT176 – Lập trình Hướng đối tượng  Thừa kế gì? Khái qt hóa chun biệt hóa • Một đối tượng thực tế thường phiên chuyên biệt đối tượng khác khái quát • Khái niệm “cơn trùng” mơ tả lồi sinh vật chung chung với nhiều đặc tính (khơng xương sống, cặp chân, ) • Châu chấu ong vò vẽ trùng:   Chia sẻ chung đặc điểm trùng Có số đặc điểm riêng: o o Châu chấu có khả nhảy Ong vò vẽ có kim khả chích ⇒ Châu chấu ong vò vẻ hai “phiên bản” đặc biệt trùng CT176 – Lập trình Hướng đối tượng  Thừa kế gì? Thừa kế quan hệ (is-a) • Thừa kế sử dụng để mơ hình hóa mối quan hệ là: (hay thực chuyên biệt hóa):   Lớp thừa kế: lớp (subclass) Lớp thừa kế: lớp cha (superclass) Thừa kế đơn • Quan hệ lớp cha lớp con: “là”   Một châu chấu “là” trùng Một ong vò vẽ “là” trùng Đa thừa kế • Một lớp chuyên biệt hóa lớp cha:   Mang tất đặc điểm lớp cha Thêm số đặc điểm đặc trưng riêng • Thừa kế dùng để mở rộng khả lớp CT176 – Lập trình Hướng đối tượng  Thừa kế gì? Thừa kế quan hệ (is-a) Cơn trùng Chứa thuộc tính phương thức chung loại trùng - Hung hãn - Có độc - Có thể bay Ong vò vẻ Châu chấu Chứa thuộc tính phương thức chung ong vò vẻ CT176 – Lập trình Hướng đối tượng - Khơng xương sống Xương ngồi cặp râu mắt đơn, cặp mắt kép - Hiền Chân dài Ăn Có thể nhảy Chứa thuộc tính phương thức chung châu chấu  Thừa kế gì? Thừa kế quan hệ (is-a) • Một điểm màu điểm có thêm màu sắc Chứa thuộc tính phương thức chung điểm không gian 2D Điểm 2D Điểm màu 2D - Tung độ, hoành độ Nhập tọa độ Hiển thị tọa độ Thay đổi tọa độ … - Màu Thay đổi màu Hiển thị màu Nhập màu sắc Chứa thuộc tính phương thức điểm khơng gian 2D với màu sắc CT176 – Lập trình Hướng đối tượng Thừa kế Java CT176 – Lập trình Hướng đối tượng  Thừa kế Java Tạo lớp thừa kế • Khai báo: modifier class extends { //subclass members } • Ví dụ: Tạo lớp Student thừa kế từ lớp Person public class Student extends Person { //Các thành phần lớp Student } CT176 – Lập trình Hướng đối tượng 10 Đa thừa kế (multiple inheritance) CT176 – Lập trình Hướng đối tượng 42  Đa thừa kế (multiple inheritance) Đa thừa kế • Đa thừa kế:   Một lớp thừa kế từ nhiều lớp cha Còn gọi đa thừa kế cài đặt (multiple inheritance of implementation) • Java không hỗ trợ đa thừa kế:   Tránh xung đột thuộc tính lớp cha (diamond problem) Đảm bảo tính đơn giản ngơn ngữ JAVA: A simple, object oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high performance, multithreaded, dynamic language CT176 – Lập trình Hướng đối tượng 43  Đa thừa kế (multiple inheritance) Đa thừa kế • Java hỗ trợ đa thừa kế kiểu (multiple inheritance of types): lớp cài đặt nhiều giao diện //One class implements multiple interfaces public class implements { } • Một lớp vừa thừa kế, vừa cài đặt interface public class extends implements { } CT176 – Lập trình Hướng đối tượng 44  Đa thừa kế (multiple inheritance) Giả lập đa thừa kế • Dùng hàm (default method) giao diện:   Chỉ thừa kế phương thức Chỉ hỗ trợ từ Java public class Button implements Clickable, Accessible { public static void main(String[] args) { Button button = new Button(); button.click(); interface Clickable{ button.access(); default void click(){ } System.out.println("click"); } } } • Lưu ý: phương pháp thừa kế p/thức, khơng thừa kế thuộc tính CT176 – Lập trình Hướng đối tượng interface Accessible{ default void access(){ System.out.println("access"); } } 45  Đa thừa kế (multiple inheritance) Giả lập đa thừa kế • Dùng quan hệ composition:    “Khơng thật” xác mặt ngữ nghĩa: quan hệ thừa kế quan hệ là, composition quan hệ bao gồm Đây phương pháp giả lập đa thừa kế sử dụng rộng rãi Cho phép thừa kế thuộc tính phương thức CT176 – Lập trình Hướng đối tượng 46  Đa thừa kế (multiple inheritance) Giả lập đa thừa kế class InterfaceOneImpl implements InterfaceOne { //class properties } @Override public String methodA(int a) { // } class InterfaceTwoImpl implements InterfaceTwo { //class properties } interface InterfaceOne { String methodA(int a); } @Override public void methodB(String s) { // } CT176 – Lập trình Hướng đối tượng interface InterfaceTwo { void methodB(String s); } 47  Đa thừa kế (multiple inheritance) Giả lập đa thừa kế public class ChildClass implements InterfaceOne, InterfaceTwo { private InterfaceOne one; private InterfaceTwo two; ChildClass(InterfaceOne one, InterfaceTwo two) { this.one = one; this.two = two; } @Override public String methodA(int a) { return one.methodA(a); } } @Override public void methodB(String s) { two.methodB(s); } CT176 – Lập trình Hướng đối tượng 48 Giao diện (interface) CT176 – Lập trình Hướng đối tượng 49  Giao diện (interface) Giao diện (interface) • Một giao diện xem lớp hồn tồn ảo: tất phương thức khơng cài đặt • Một giao diện:    Chỉ chứa khai báo phương thức với thuộc tính truy cập public Hoặc số tĩnh public (public static final ) Được khai báo từ khóa interface [public] interface [extends ] { //khai báo số (static final ) //khai báo phương thức } CT176 – Lập trình Hướng đối tượng 50  Giao diện (interface) Giao diện (interface) • Giao diện đóng vai trò “cam kết” (contract):   Giao diện làm (nhưng khơng định làm nào) Qui ước đặt tên: tiếp vị ngữ -able (có khả năng/có thể) • Một lớp cài đặt (implement) giao diện:   Cài đặt tất phương thức giao diện  Xác nhận khả lớp làm Sử dụng từ khóa implements • Khơng thể tạo đối tượng thuộc giao diện, tạo tham chiếu thuộc kiểu giao diện CT176 – Lập trình Hướng đối tượng 51  Giao diện (interface) Ví dụ public interface Movable { //abstract methods to be implemented //by the subclasses } public public public public void void void void moveUp(); moveDown(); moveLeft(); moveRight(); CT176 – Lập trình Hướng đối tượng 52  Giao diện (interface) Ví dụ public class MovablePoint implements Movable { private int x, y; //coordinates of the point Kết quả: public MovablePoint(int x, int y) { this.x = x; this.y = y; } public String toString() { return "(" + x + "," + y + ")"; } public void moveUp() { y ; } public class TestMovable { public void moveDown() { public static void main(String[] args) { y++; Movable m1 = new MovablePoint(5, 5); } public void moveLeft() { System.out.println(m1); x ; m1.moveDown(); } System.out.println(m1); public void moveRight() { m1.moveRight(); x++; System.out.println(m1); } } } } CT176 – Lập trình Hướng đối tượng 53  Giao diện (interface) Phương thức mặc định (default method) • Từ Java 8, giao diện có phương thức mặc định:   Là phương thức cài đặt (có thân hàm) Cho phép thêm vào giao diện phương thức mà không làm lớp cài đặt giao diện bị lỗi • Các lớp cài đặt phương thức cài đặt hay không cài đặt phương thức mặc định:    Không cài đặt: thừa kế phương thức mặc định Cài đặt: nạp đè phương thức mặc định giao diện Không cài đặt, khai báo: phương thức ảo • Cú pháp: thêm từ khóa default trước khai báo CT176 – Lập trình Hướng đối tượng 54  Tổng kết Tổng kết • Tính thừa kế cho phép sử dụng lại mã (reuse code) • Lớp thừa kế gọi lớp con, lớp thừa kế gọi lớp cha • Lớp có tất thành phần lớp cha   Định nghĩa thêm thuộc tính phương thức Nạp đè (overriding) hàm lớp cha • Quan hệ lớp lớp cha quan hệ (is-a) • Tính đa hình cho phép loại đối tượng khác ứng xử khác với thông điệp • Đa hình: thừa kế + nạp đè hàm + liên kết động CT176 – Lập trình Hướng đối tượng 55  Tổng kết Tổng kết • Java khơng hỗ trợ đa thừa kế (lớp có lớp cha) • Các kỹ thuật mơ đa thừa kế:   Hàm (default method) giao diện Quan hệ composition (hay delegation) • Giao diện:   Đóng vai trò “cam kết” tính kiểu Như lớp hoàn toàn ảo: có khai báo phương thức, khơng có định nghĩa phương thức thuộc tính CT176 – Lập trình Hướng đối tượng 56 ... Hướng đối tượng 16  Thừa kế Java Hàm xây dựng thừa kế public class Cylinder extends Circle { //các liệu thành viên public Cylinder() { super(); height = 0; } } -radius: -height: Cylinder(5, 2) {

Ngày đăng: 08/11/2019, 10:15

Tài liệu cùng người dùng

Tài liệu liên quan