Bài giảng Lập trình hướng đối tượng 1: Chương 4 Kế thừa – đa hình do ThS. Thái Kim Phụng biên soạn cung cấp cho người học các kiến thức: Kế thừa, đa hình, lớp trừu tượng, lớp niêm phong, lớp trong lớp, giao diện.
Trường ĐH Kinh Tế Tp.HCM Khoa Tin Học Quản Lý LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG CHƯƠNG 4: KẾ THỪA – ĐA HÌNH Nội dung 1 Kế Kếthừa thừa 2.Đa Đahình hình 3 Lớp Lớptrừu trừutượng tượng 4 Lớp Lớpniêm niêm phong phong 5.Lớp Lớptrong lớp lớp 6.Giao Giao diện diện KẾ THỪA (inheritance) Kế thừa gì? Định nghĩa kế thừa Kế thừa cho phép tạo lớp có (kế thừa) thuộc tính phương thức lớp khác Lớp cha kế thừa gọi lớp sở (base class) Lớp kế thừa từ lớp cha gọi lớp dẫn xuất (derived class) Khai báo lớp dẫn xuất kế thừa lớp sở: class class:: {{ …………………… …………………… }} Ví dụ kế thừa Furniture Chair Lounge Chair Sofa class desk: table class dining_table: table Table Dinin g Table Desk class table: furniture Đơn kế thừa đa kế thừa Đơn kế thừa lớp dẫn xuất kế thừa từ lớp sở Đa kế thừa lớp dẫn xuất kế thừa từ nhiều lớp sở C# cho phép lớp kế thừa từ lớp sở Đa kế thừa cách thực thi nhiều giao diện (interface) Kế thừa gì? Dẫn xuất từ sở Thành viên A Thành viên A Thành viên B Thành viên C Thành viên B Dẫn xuất từ Thành viên C Thành viên D Lớp sở Được tạo lớp dẫn xuất Lớp dẫn xuất Ví dụ 5’ class ConNguoi { public ConNguoi(){ … } } class SinhVien:ConNguoi{ public SinhVien() { ……… } } Lớp SinhVien kế thừa từ lớp ConNguoi Gọi hàm khởi tạo lớp sở Vì lớp dẫn xuất kế thừa phương thức khởi tạo (Constructor) lớp sở nên lớp dẫn xuất phải thực thi phương thức khởi tạo riêng Nếu lớp sở có phương thức khởi tạo mặc định (phương thức khởi tạo khơng có tham số) phương thức khởi tạo lớp dẫn xuất định nghĩa cách thông thường Lớp lớp public class LopHoc { private string tenlop; private string chuyennganh; public LopHoc() { tenlop = "TH1"; chuyennganh = "Tin hoc quan ly"; } internal class SinhVien { private string tensv; public SinhVien() { tensv = "Nguyen Van An"; } Lớp lớp public void HienThi(LopHoc lop) { Console.WriteLine("Thong tin sinh vien"); Console.WriteLine("Ten sinh :"+tensv); Console.WriteLine("Ten lop :"+lop.tenlop); Console.WriteLine("Chuyen nganh :" + lop.chuyennganh); } } } Lớp lớp class Program { static void Main(string[] args) { LopHoc lop = new LopHoc(); LopHoc.SinhVien sv = new LopHoc.SinhVien(); sv.HienThi(lop); } } GIAO DIỆN (Interface) Giao diện Giao diện ràng buộc, giao ước đảm bảo cho lớp hay cấu trúc thực điều Khi lớp thực thi giao diện, lớp báo cho thành phần biết lớp có hỗ trợ phương thức, thuộc tính, kiện mục khai báo giao diện Một giao diện giống lớp chứa phương thức trừu tượng Khi lớp thực thi giao diện, lớp phải thực thi tất phương thức giao diện Đây bắt buộc mà lớp phải thực Định nghĩa giao diện Cú pháp để định nghĩa giao diện sau: [bổ [bổtừ từtruy truycập] cập] interface interface [:danh [:danhsách sáchcơ cơsở] sở] {{ }} Trong đó: Bổ từ truy cập: public, private, protected, internal, protected internal Tên giao diện theo sau từ khóa interface, tên giao diện thường bắt đầu chữ I hoa (không bắt buộc) Danh sách sở danh sách giao diện mà giao diện mở rộng Định nghĩa giao diện public interface ITaiKhoan { void GuiTien(decimal soLuong); bool RutTien(decimal soLuong); decimal SoTien { get; } } Thực thi giao diện public class TaiKhoanTietKiem: ITaiKhoan { private decimal soTien; public bool RutTien(decimal soLuong) { if (soTien >= soLuong) { soTien -= soLuong; return true; } Console.WriteLine("Rut tien bi loi "); return false; } Thực thi giao diện public void GuiTien (decimal soLuong) { soTien += soLuong; } public decimal SoTien { get { return soTien; } } } Lưu ý: Không bỏ qua phương thức Thực thi nhiều giao diện public interface ITinhtoan { long Tinh(int a, int b); } public interface IKetqua { void Ketqua(int a, int b); } Thực thi nhiều giao diện public class Tinhtoans: ITinhtoan,IKetqua { public long Tinh(int a, int b) { a++; b++; return (a+b); } public void Ketqua(int a, int b) { Console.WriteLine("a=" +a); Console.WriteLine("a=" +b); } } Bài thực hành Xây dựng lớp HinhHoc, kế thừa lớp HinhHoc để tính diện tích cho hình: Hình trịn Hình chữ nhật Bài thực hành Xây dựng lớp Nguoi gồm có thành phần sau: Họ tên Ngày sinh Quê quán Và phương thức: Phương thức khởi tạo tham số Phương thức khởi tạo có tham số Phương thức cho phép nhập thông tin Họ tên, ngày sinh, Quê quán người Phương thức cho phép hiển thị thơng tin người hình Bài thực hành Xây dựng lớp SinhVien kế thừa từ lớp Nguoi gồm có thuộc tính sau: Các thuộc tính lớp Nguoi Mã sinh viên Lớp Và phương thức: Khởi tạo tham số Khởi tạo có tham số Nhập thông tin Họ tên, ngày sinh, Quê quán, Mã Sinh viên, Lớp sinh viên Hiển thị thơng tin sinh viên hình Bài thực hành Xây dựng lớp CongNhan kế thừa lớp Nguoi gồm có thuộc tính sau: Các thuộc tính lớp Nguoi Hệ số lương Lương Phụ cấp Lương = Hệ số lương * Lương (1 + phụ cấp) Và phương thức: Khởi tạo khơng có tham số Khởi tạo có tham số Nhập thơng tin cơng nhân Tính lương cơng nhân Hiển thị để in thơng tin công nhân ... trỏ đến đối tượng thuộc lớp dẫn xuất Nhưng phép truy cập đến thành phần khai báo lớp sở Tham chiếu thuộc lớp sở public static void Main() { XeHoi c = new XeHoi(150, "49 A -4 4 44" , "Toyota", 24) ; c.Xuat();... khai báo Phương thức trừu tượng phải đặt lớp trừu tượng Lớp trừu tượng Không thể tạo đối tượng (new) từ lớp trừu tượng (abstract class) Cú pháp phương thức trừu tượng: public abstract void... gọi phương thức trừu tượng (abstract method) Lớp trừu tượng Lớp trừu tượng có từ khóa abstract trước từ class VD: abstract class Tau { } Trong phần thân phương thức trừu tượng khơng có câu