Lớp được kế thừa gọi là lớp cha (parent class) hoặc lớp cơ sở (base class) Lớp kế thừa gọi là lớp con (child class) hoặc lớp dẫn xuất (derived class) Lớp con kế thừa tất cả các thành phần của lớp cha, ngoại trừ các thành phần được khai báo là private Constructor không được kế thừa Lớp con có thể gọi constructor của lớp cha Lớp con có thể định nghĩa thêm các thuộc tính và phương thức mới C không cho phép đa kế thừa (một lớp kế thừa nhiều lớp cha), tuy nhiên bạn có thể sử dụng Interface để triển khai đa kế thừa
Bài Inheritance Module: BOOTCAMP WEB-BACKEND DEVELOPMENT Kiểm tra trước Hỏi trao đổi khó khăn gặp phải “Access Modifier” Tóm tắt lại phần học từ “Access Modifier” Mục tiêu • Trình bày chế kế thừa • Triển khai chế kế thừa lớp • Trình bày chế ghi đè phương thức (method overriding) • Biểu diễn mối quan hệ kế thừa ký hiệu • Trình bày ý nghĩa từ khố final • Trình bày khái niệm Polymophism • Trình bày phương thức ToString() lớp Object • Trình bày chế ép kiểu (casting) Inheritance Kế thừa • Kế thừa chế cho phép lớp Con sử dụng lại đặc điểm hành vi định nghĩa lớp Cha • Ví dụ • • Lớp Cha: Car Lớp Con: Sports Car, Luxury Car, Family Car Quan hệ is-a • Quan hệ lớp lớp cha quan hệ is-a (là-một) • Ví dụ: Ngựa động vật ăn cỏ, sư tử động vật ăn thịt, động vật ăn cỏ động vật… Các khái niệm • Lớp kế thừa gọi lớp cha (parent class) lớp sở (base class) • Lớp kế thừa gọi lớp (child class) lớp dẫn xuất (derived class) • Lớp kế thừa tất thành phần lớp cha, ngoại trừ thành phần khai báo private • Constructor khơng kế thừa • Lớp gọi constructor lớp cha • Lớp định nghĩa thêm thuộc tính phương thức • C# khơng cho phép đa kế thừa (một lớp kế thừa nhiều lớp cha), nhiên bạn sử dụng Interface để triển khai đa kế thừa Một số dạng kế thừa • Single: Một lớp kế thừa từ lớp cha • Multilevel: Một lớp kế thừa từ lớp cha, lớp cha lại kế thừa từ lớp khác • Hierarchical: Một lớp cha có nhiều lớp với nhiều level khác • Multiple: Một lớp kế thừa từ nhiều lớp cha Cú pháp kế thừa • Từ khố extends sử dụng để kế thừa lớp • Cú pháp: class { } class : { Trong đó: • • derived_class tên lớp } base_class tên lớp cha Kế thừa: Ví dụ Phương thức ToString() Lớp Object phương thức ToString() • Lớp Object lớp gốc tất lớp C# • Tất lớp C# kế thừa từ lớp Object • Lớp Object có phương thức sử dụng thơng dụng ToString(): Trả chuỗi mơ tả đối tượng • Mơ tả phương thức toString() là: public virtual String ToString() • Ví dụ: Console.WriteLine(circle.ToString()); Override phương thức ToString() • Các lớp ghi đè phương thức ToString() để mơ tả đối tượng tốt • Ví dụ: public class Circle { private int radius; public Circle(int radius) { this.radius = radius; } public override String ToString() { return "I am a Circle, my radius is " + this.radius; } } Polymorphism Polymorphism Polymorphism • Polymorphism (Đa hình) chế cho phép biến thuộc kiểu liệu cha trỏ đến đối tượng thuộc lớp • Khi khai báo lớp, đồng nghĩa với tạo kiểu liệu • Khi lớp kế thừa lớp cha kiểu liệu lớp cha gọi supertype, kiểu liệu lớp gọi subtype • Ví dụ: Geometric supertype Circle, Circle subtype Geometric Tất đối tượng lớp Circle Geometric, khơng phải ngược lại • Tính đa hình, cho phép khai báo sau: Geometric geometricObj = new Circle(1); Polymorphism Ép kiểu (Casting) Ép kiểu Toán tử instanceof Ép kiểu (Casting) • Ép kiểu chế chuyển đổi tham chiếu đến đối tượng thuộc toại thành tham chiếu đến đối tượng thuộc loại khác • Có loại ép kiểu: • Implicit casting (ép kiểu ngầm định): khơng cần cú pháp ép kiểu, ln đúng, ép từ liểu kiểu base • Explicit casting (ép kiểu tường minh): Ép từ base xuống kiểu • Ví dụ: Object o = new Circle(); Implicit casting Geometric g = new Circle(); Circle c = (Circle) g; Explicit casting Implicit casting vs Explicit • Tốn tử instanceof • Tốn tử instanceof giúp kiểm tra kiểu đối tượng • Giá trị trả có kiểu boolean • Ví dụ: if (myObject instanceof Circle) { Console.WriteLine("The circle diameter is " + ((Circle)myObject).getDiameter()); } Lưu ý: Nếu khơng ép sang kiểu Circle khơng thể gọi phương thức getDiameter() Toán tử typeof, GetType, is • typeof takes a type name (which you specify at compile time) • GetType gets the runtime type of an instance • is returns true if an instance is in the inheritance tree Từ khố sealed Từ khố sealed • Từ khố sealed áp dụng cho lớp để ngăn ngừa việc kế thừa ngăn ngừa việc ghi đè (override) • Ví dụ: public sealed class Animal { } public class Circle { public sealed void display(){ } } áp dụng cho phương thức Tổng kết • Kế thừa chế cho phép lớp thừa hưởng đặc điểm hành vi lớp khác • Lớp kế thừa gọi lớp cha, lớp kế thừa gọi lớp • Ghi đè phương thức hình thức lớp viết lại phương thức có lớp cha • Sử dụng mũi tên rỗng để biểu diễn mối quan hệ kế thừa lớp • C# khơng hỗ trợ đa kế thừa • Từ khoá sealed sử dụng để ngăn chặn việc kế thừa từ lớp việc ghi đè phương thức • Đa hình chế cho phép biến kiểu cha trỏ đến đối tượng kiểu • Lớp Object lớp cha tất lớp C# • Phương thức ToString() sử dụng để trả chuỗi mô tả đối tượng • Ép kiểu hình thức chuyển đổi tham chiếu đối tượng từ kiểu sang tham chiếu đối tượng thuộc kiểu khác Hướng dẫn Hướng dẫn làm thực hành tập Chuẩn bị tiếp theo: Interface Abstract class ... niệm Polymophism • Trình bày phương thức ToString() lớp Object • Trình bày chế ép kiểu (casting) Inheritance Kế thừa • Kế thừa chế cho phép lớp Con sử dụng lại đặc điểm hành vi định nghĩa lớp Cha... lớp • Cú pháp: class { } class : { Trong đó: • • derived_class tên lớp } base_class tên lớp cha Kế thừa: Ví dụ Method overriding Method... time) • GetType gets the runtime type of an instance • is returns true if an instance is in the inheritance tree Từ khố sealed Từ khố sealed • Từ khố sealed áp dụng cho lớp để ngăn ngừa việc