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 6: Kế thừa

37 0 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 37
Dung lượng 1,1 MB

Nội dung

Bài giảng Lập trình hướng đối tượng - Bài 6: Kế thừa nêu lên khái niệm kế thừa, biểu diễn quan hệ kế thừa trong biểu đồ lớp, nguyên lý kế thừa, khởi tạo và hủy bỏ đối tượng lớp con. Mời các bạn tham khảo bài giảng để bổ sung thêm kiến thức về lĩnh vực này.

Bài Kế thừa Trịnh Thành Trung trungtt@soict.hust.edu.vn Nội dung Khái niệm kế thừa Biểu diễn quan hệ kế thừa biểu đồ lớp Nguyên lý kế thừa Khởi tạo hủy bỏ đối tượng lớp Khái niệm kế thừa Inheritance Kế thừa • Kế thừa? “Xây dựng lớp có sẵn đặc tính lớp cũ, đồng thời chia sẻ hay mở rộng đặc tính sẵn có” Bản chất kế thừa • Phát triển lớp dựa lớp có • Ví dụ − Lớp Người có thuộc tính tên, tuổi, chiều cao, cân nặng…; phương thức ăn, ngủ, chơi… − Lớp Sinh Viên thừa kế từ lớp Người, thừa kế thuộc tính tên, tuổi, chiều cao, cân nặng…; phương thức ăn, ngủ, chơi… − Bổ sung thêm thuộc tính mã số sinh viên, số tín tích lũy…, phương thức tham dự lớp học, thi… Bản chất kế thừa • Chính ngun lý phân cấp trừu tượng hóa Ví dụ • Khái niệm − Lớp cũ: Lớp cha (parent, superclass), lớp sở (base class) − Lớp mới: Lớp (child, subclass), lớp dẫn xuất (derived class) • Ví dụ: SinhVien thừa kế (dẫn xuất) từ lớp Nguoi Lớp cha Nguoi Định nghĩa phương thức thuộc tính chung người Lớp SinhVien Các phương thức thuộc tính chung người Các thuộc tính & phương thức lớp cha Nguoi + Phương thức thuộc tính riêng sinh viên Mối quan hệ kế thừa • Lớp lớp cha có tính tương đồng Lớp cha Nguoi • Lớp SinhVien kế thừa từ lớp Nguoi • Một sinh viên người Lớp SinhVien Các thuộc tính & phương thức lớp cha Nguoi Mối quan hệ kế thừa − Cả GiaoVien SinhVien có quan hệ (is-a) với lớp Nguoi − Cả giáo viên sinh viên có số hành vi thông thường người Lớp cha Nguoi Lớp SinhVien Lớp GiaoVien Các thuộc tính & phương thức lớp cha Nguoi Các thuộc tính & phương thức lớp cha Nguoi Mối quan hệ kế thừa • Lớp − Là loại (is-a-kind-of) lớp cha − Kế thừa thành phần liệu hành vi lớp cha − Chi tiết hóa cho phù hợp với mục đích sử dụng + Extension: Thêm thuộc tính/hành vi + Redefinition (Method Overriding): Chỉnh sửa lại hành vi kế thừa từ lớp cha 10 Nguyên lý kế thừa public protected mặc định private Cùng lớp ✔ ✔ ✔ ✔ Lớp gói ✔ ✔ ✔ ✘ Lớp khác gói ✔ ✔ ✘ ✘ Lớp khác gói ✔ ✘ ✘ ✘ 23 Nguyên lý kế thừa • Các phương thức khơng phép kế thừa: − Các phương thức khởi tạo hủy + Làm nhiệm vụ khởi đầu gỡ bỏ đối tượng + Chúng biết cách làm việc với lớp cụ thể − Toán tử gán = + Làm nhiệm vụ giống phương thức khởi tạo 24 Ví dụ public class TuGiac { protected Diem d1, d2, d3, d4; public void setD1(Diem _d1) {d1=_d1;} public Diem getD1(){return d1;} public void printTuGiac(){ } Sử dụng thành phần } protected lớp cha public class HinhVuong extends TuGiac { lớp public HinhVuong(){ d1 = new Diem(0,0); d2 = new Diem(0,1); d3 = new Diem(1,0); d4 = new Diem(1,1); } } public class Test{ public static void main(String args[]){ HinhVuong hv = new HinhVuong(); hv.printTuGiac(); Gọi phương thức public lớp } cha đối tượng lớp } Ví dụ Person - name: String class Person { private String name; private Date bithday; public String getName() {return name;} } class Employee extends Person { private double salary; public boolean setSalary(double sal) { salary = sal; return true; } public String getDetail() { String s = name + ", " + birthday + ", " + salary; // ERROR } } - birthday: Date + setName() + setBirthday() Employee - salary: double + setSalary() + getDetails() Ví dụ (tiếp) Person - name: String public class Test{ public static void main(String args[]){ Employee e = new Employee(); e.setName("John"); e.setSalary(3.0); } } - birthday: Date + setName() + setBirthday() Employee - salary: double + setSalary() + getDetails() Ví dụ • Cùng gói • Khác gói package abc; public class Person { Date birthday; String name; } package abc.Person; public class Employee extends Person { double salary; public String getDetail() { String s; s = name + "," + birthday + "," + salary; return s; } } Ví dụ package abc; public class Person { protected Date birthday; protected String name; } package abc.Person; public class Employee extends Person { double salary; public String getDetail() { String s; s = name + "," + birthday + "," + salary; return s; } } Khởi tạo hủy bỏ đối tượng Thứ tự khởi tạo, gọi phương thức lớp cha Khởi tạo hủy bỏ đối tượng • Khởi tạo huỷ bỏ đối tượng kế thừa • Khởi tạo đối tượng: − Lớp cha khởi tạo trước lớp − Các phương thức khởi tạo lớp gọi phương thức khởi tạo lớp cha câu lệnh + Tự động gọi (ngầm định - implicit): Khi lớp cha CÓ phương thức khởi tạo mặc định (hoặc ngầm định) + Gọi trực tiếp (tường minh - explicit) • Hủy bỏ đối tượng: Sử dụng từ khóa super − Ngược lại so với khởi tạo đối tượng 31 Gọi phương thức lớp cha • Tái sử dụng đoạn mã lớp cha lớp • Gọi phương thức khởi tạo super(danh sách tham số); − Bắt buộc lớp cha khơng có phương thức khởi tạo mặc định − Phải khai báo dòng lệnh phương thức khởi tạo lớp • Gọi phương thức lớp cha super.tênPt(danh sách tham số); 32 Ví dụ public class TuGiac { protected Diem d1, d2; protected Diem d3, d4; public TuGiac() { System.out.println("Lop cha TuGiac()"); } } public class HinhVuong extends TuGiac { public HinhVuong() { // Tu dong goi TuGiac() System.out.println("Lop HinhVuong()"); } } public class Test { public static void main(String arg[]) { HinhVuong hv = new HinhVuong(); } } Ví dụ public class TuGiac { protected Diem d1, d2; protected Diem d3, d4; public TuGiac(Diem d1, Diem d2, Diem d3, Diem d4) { System.out.println("Lop cha TuGiac(d1, d2, d3, d4)"); this.d1 = d1; this.d2 = d2; this.d3 = d3; this.d4 = d4; } } public class HinhVuong extends TuGiac { public HinhVuong() { System.out.println("Lop HinhVuong()"); } } public class Test { public static void main(String arg[]) { HinhVuong hv = new HinhVuong(); } } Ví dụ public class TuGiac { protected Diem d1, d2, d3, d4; public TuGiac(Diem d1, Diem d2, Diem d3, Diem d4) { System.out.println("Lop cha TuGiac(d1, d2, d3, d4)"); this.d1 = d1; this.d2 = d2; this.d3 = d3; this.d4 = d4; } } public class HinhVuong extends TuGiac { public HinhVuong() { super(new Diem(0,0), new Diem(0,1), new Diem(1,1),new Diem(1,0)); System.out.println("Lop HinhVuong()"); } } public class Test { public static void main(String arg[]) { HinhVuong hv = new HinhVuong(); } } Ví dụ public class TuGiac { protected Diem d1, d2, d3, d4; public TuGiac(Diem d1, Diem d2, Diem d3, Diem d4) { System.out.println("Lop cha TuGiac(d1, d2, d3, d4)"); this.d1 = d1; this.d2 = d2; this.d3 = d3; this.d4 = d4; } } public class HinhVuong extends TuGiac { public HinhVuong(Diem d1, Diem d2, Diem d3, Diem d4) { super(d1, d2, d3, d4); System.out.println("Lop HinhVuong(d1, d2, d3, d4)"); } } public class Test { public static void main(String arg[]) { HinhVuong hv = new HinhVuong( (new Diem(0,0), new Diem(0,1), new Diem(1,1),new Diem(1,0))); } } Thank you! Any questions? ...Nội dung Khái niệm kế thừa Biểu diễn quan hệ kế thừa biểu đồ lớp Nguyên lý kế thừa Khởi tạo hủy bỏ đối tượng lớp Khái niệm kế thừa Inheritance Kế thừa • Kế thừa? “Xây dựng lớp có sẵn... toString(), equals() 20 Nguyên lý kế thừa Lớp kế thừa từ lớp cha? Ngun lý kế thừa • Lớp thừa kế từ lớp cha? − Kế thừa thành viên khai báo public protected lớp cha − Không kế thừa thành viên private Thành... thức lớp Người 13 Kế thừa kết tập Kế thừa Kết tập • Tái sử dụng thơng qua lớp • Tái sử dụng thơng qua đối tượng • Tạo lớp cách phát triển lớp có sẵn • Tạo tham chiếu đến đối tượng lớp có sẵn lớp

Ngày đăng: 11/05/2021, 04:21