intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Object-Oriented programming: Chương 4 - Văn Thị Thiên Trang

Chia sẻ: Nhân Chi Sơ | Ngày: | Loại File: PDF | Số trang:12

60
lượt xem
1
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Chương 4 – Tính kế thừa. Những nội dung chính trong chương này gồm có: Kế thừa – Inheritance, phạm vi kế thừa, đối tượng Super, định nghĩa lại phương thức, quan hệ qiữa các lớp, toán tử instanceof, vấn đề ép kiểu trong Java. Mời các bạn cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Object-Oriented programming: Chương 4 - Văn Thị Thiên Trang

Chương 4. Kế thừa<br /> Mục đích & yêu cầu<br /> Giải thích được:<br /> • Thừa kế là gì trong OOP<br /> OOP.<br /> • Các loại thừa kế trong các ngôn ngữ OOP.<br /> <br /> Chương 4. Kế thừa<br /> <br /> Phân biệt được kỹ thuật Overloading và<br /> Overriding.<br /> verriding.<br /> Sử dụng được toán tử instanceOf và ép kiểu<br /> trong Java<br /> Giải thích được những tình huống có thể xảy<br /> ra khi ép kiểu.<br /> 1<br /> <br /> Nội dung chính<br /> <br /> 2<br /> <br /> 1. Kế thừa – Khái niệm<br /> <br /> 1.<br /> <br /> Kế thừa – Inheritance.<br /> <br /> 2.<br /> <br /> Phạm vi kế thừa<br /> ế ừ<br /> <br /> 3.<br /> <br /> Đối tượng Super<br /> <br /> Lớp dùng để kế thừa gọi là lớp cha (lớp<br /> cơ sở)<br /> <br /> 4.<br /> <br /> Định nghĩa lại phương thức<br /> <br /> Lớp kế thừa gọi là lớp con (lớp dẫn xuất).<br /> <br /> 5.<br /> 5<br /> <br /> Quan hệ qiữa các lớp<br /> <br /> 6.<br /> <br /> Toán tử instanceof<br /> <br /> Lớp con có một số thành phần của lớp cha<br /> mà không cần định nghĩa<br /> <br /> 7.<br /> <br /> Vấn đề ép kiểu trong Java<br /> <br /> Kế thừa cho phép định nghĩa một lớp mới<br /> qua một lớp đã có<br /> <br /> Lớp con có thể định nghĩa thêm các thành<br /> phần riêng của mình.<br /> 3<br /> <br /> 4<br /> <br /> 1<br /> <br /> Chương 4. Kế thừa<br /> 1. Kế thừa – Ưu điểm<br /> <br /> 1. Kế thừa – Phân Loại<br /> <br /> Thừa hưởng data và code từ một hay<br /> g<br /> ộ<br /> y<br /> <br /> Đơn kế thừa<br /> Đa kế thừa (thừa kế bội)<br /> <br /> nhiều lớp khác.<br /> <br /> Mỗi ngôn ngữ OOP hỗ trợ khả năng kế<br /> <br /> Kỹ thuật này giúp tái sử dụng code<br /> <br /> thừa riêng<br /> <br /> Tiết kiệ công sức lậ t ì h công<br /> kiệm ô<br /> ứ lập trình, ô<br /> <br /> C++: Đa kế thừa<br /> <br /> sức kiểm tra code.<br /> <br /> C#, Java : Đơn kế thừa.<br /> 5<br /> <br /> 6<br /> <br /> Thí dụ về thừa kế<br /> <br /> 1. Kế thừa – Khai báo<br /> Cú pháp:<br /> 300<br /> <br /> 200<br /> <br /> 150<br /> 25<br /> Luan<br /> P02<br /> <br /> 100<br /> <br /> 21<br /> Hoa<br /> H<br /> P01<br /> <br /> mng<br /> emp<br /> p<br /> <br /> class extends <br /> {<br /> Khai báo các thành phần bổ sung của lớp con<br /> }<br /> <br /> 200<br /> 150<br /> 25<br /> Quang<br /> P03<br /> <br /> 300<br /> 200<br /> 100<br /> <br /> Ví dụ: lớp SinhVien kế thừa từ lớp ConNguoi<br /> ụ<br /> p<br /> p<br /> g<br /> class SinhVien extends CONNGUOI<br /> {<br /> ….<br /> }<br /> 7<br /> <br /> 8<br /> <br /> 2<br /> <br /> Chương 4. Kế thừa<br /> 2. Phạm vi kế thừa<br /> <br /> 2. Phạm vi kế thừa<br /> <br /> Lớp con được phép kế thừa các thành<br /> phần của lớp cha với phạm vi:<br /> <br /> Ví dụ:<br /> class ConNguoi<br /> {<br /> protected String hoTen;<br /> protected int namSinh;<br /> public ConNguoi(){ hoTen=“”; namSinh=1900;}<br /> public ConNguoi(String ht, int ns){ …}<br /> public void ganHoTen(String ht){…}<br /> public void ganNamSinh(int ns){…}<br /> bli<br /> id<br /> N Si h(i t<br /> ){ }<br /> public String layHoTen(){…}<br /> public String layNamSinh(){…}<br /> public void hienThi()<br /> { System.out.print(hoTen+” “ + namSinh);}<br /> <br /> • public<br /> • protected<br /> <br /> Thành phần p<br /> p<br /> protected: được p p kế<br /> ợ phép<br /> thừa nhưng không được phép truy<br /> xuất bên ngoài lớp.<br /> 9<br /> <br /> 2. Phạm vi kế thừa<br /> <br /> }<br /> <br /> 10<br /> <br /> 3. Đối tượng super<br /> Đối tượng super dùng để truy xuất đến đối tượng<br /> thuộc lớp cha trong phạm vi lớp con<br /> con.<br /> <br /> class SinhVien extends ConNguoi<br /> {<br /> <br /> Sử dụng super:<br /> <br /> protected double dtb;<br /> public void ganDtb(double d){…}<br /> <br /> • Gọi phương thức khởi tạo lớp cha: super(…)<br /> <br /> public double layDtb(){…}<br /> <br /> Gọi phương thức thuộc lớp cha: super.tenPhươngThức(…)<br /> <br /> public void hienThi(){…}<br /> <br /> Lời gọi super() phải được gọi đầu tiên trong PTKT<br /> lớp con (sau khai báo).<br /> <br /> }<br /> <br /> Lớp SV có những thành phần nào?<br /> 11<br /> <br /> Nếu trong lớp con không gọi PTKT của lớp cha thì<br /> tự động gọi PTKT ngầm định của lớp cha.<br /> 12<br /> <br /> 3<br /> <br /> Chương 4. Kế thừa<br /> 3. Đối tượng super<br /> <br /> 4. Định nghĩa lại phương thức<br /> <br /> Ví dụ sử dụng super<br /> <br /> Override:<br /> Override: Trong lớp con được phép định<br /> nghĩa lại (sửa code bên trong phương<br /> thức) các phương thức kế thừa từ lớp<br /> cha.<br /> cha.<br /> <br /> class SinhVien extends ConNguoi{<br /> protected double dtb;<br /> public SinhVien() { super(); dtb=0.0;}<br /> public SinhVien(String ht, int ns, double d)<br /> { super(ht,ns); dtb=d; }<br /> public void ganDtb(double d){…}<br /> public double layDtb(){ }<br /> layDtb(){…}<br /> public void hienThi(){…}<br /> <br /> Đối tượng của lớp con sẽ sử dụng<br /> ợ g<br /> p<br /> ụ g<br /> phương thức đã định nghĩa lại.<br /> lại.<br /> <br /> }<br /> <br /> 13<br /> <br /> 14<br /> <br /> 4. Định nghĩa lại phương thức<br /> <br /> 4. Định nghĩa lại phương thức<br /> <br /> Ví dụ: định nghĩa lại phương thức hienThi() trong<br /> lớp SinhVien:<br /> class SinhVien extends ConNguoi{<br /> <br /> Khác biệt giữa overloading và overriding:<br /> overriding:<br /> • Overloading: Kỹ thuật cho phép nhiều hành vi trùng tên<br /> Overloading:<br /> <br /> protected double dtb;<br /> …<br /> public void hienThi()<br /> {<br /> super.hienThi();<br /> System.out.println(“ ” + dtb);<br /> }<br /> <br /> nhưng khác số lượng tham số hoặc kiểu tham số trong<br /> cùng một lớp.<br /> lớp.<br /> • Overriding: Kỹ thuật cho phép sửa code của một hành<br /> vi mà lớp con thừa kế từ lớp cha để lớp con phản ứng<br /> <br /> }<br /> <br /> Sử dụng:<br /> <br /> khác với lớp cha.<br /> <br /> SinhVien sinhVien = new SinhVien(“Ng Van A”,1985,7.5);<br /> SinhVien(“Ng<br /> sinhVien.hienThi();//gọi phương thức đã được định nghĩa lại.<br /> 15<br /> <br /> 16<br /> <br /> 4<br /> <br /> Chương 4. Kế thừa<br /> Luyện tập<br /> overloading method:<br /> cùng tên,<br /> khác tham số,<br /> cùng lớp<br /> <br /> overriding method:<br /> cùng tên,<br /> cùng tham số,<br /> ở hai lớp cha con<br /> <br /> Khai báo lớp SV (theo sơ đồ)<br /> Khai báo các lớp SVSP, SVTH kế thừa<br /> từ lớp SV.<br /> Chương trình:<br /> • Tạo 1 sinh viên SP<br /> • Tạo 1 sinh viên TH<br /> • Hiển thị thông tin của 2 SV trên<br /> <br /> 17<br /> <br /> 18<br /> <br /> SV<br /> <br /> Sơ đồ các<br /> lớp<br /> <br /> SVSP<br /> #noiTT<br /> #diemTT<br /> +SVSP(..)<br /> +hienThi()<br /> +duocTN()<br /> <br /> Cài đặt lớp SV<br /> <br /> #hoTen<br /> #namSinh<br /> #dtb<br /> +SV(String,int,double)<br /> SV(S i<br /> i d bl )<br /> +hienThi()<br /> SVTH<br /> #tenDT<br /> #diemDT<br /> + SVTH(…)<br /> + hienThi()<br /> + duocTN()<br /> <br /> class SV<br /> {<br /> protected String hoTen;<br /> protected int namSinh;<br /> protected double dtb;<br /> public SV(String ht, int ns, double d)<br /> {hoTen=ht; namSinh=ns; dtb=d;}<br /> public void hienThi()<br /> {<br /> System.out.print(hoTen+” “+namSinh+” “+dtb);<br /> }<br /> }<br /> <br /> 19<br /> <br /> 20<br /> <br /> 5<br /> <br />
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2