Xin chào đọc giả. Today, giaibngdaquocteu23 mạn phép đưa ra đánh giá chủ quan về kinh nghiệm, tin tức bóng đá qua nội dung Tính Kế Thừa Là Gì ? Tính Kế Thừa Trong Lập Trình Hướng Đối Tượng
Phần nhiều nguồn đều được lấy thông tin từ những nguồn website lớn khác nên chắc chắn có vài phần khó hiểu.
Mong mọi người thông cảm, xin nhận góp ý and gạch đá bên dưới comment
Xin quý khách đọc bài viết này ở nơi riêng tư kín đáo để đạt hiệu quả tốt nhất
Tránh xa tất cả các thiết bị gây xao nhoãng trong công việc tập kết
Bookmark lại nội dung bài viết vì mình sẽ cập nhật hàng tháng
Khóa học lập trình C # .Net Lập trình OOP với Kế thừa C # trong Lập trình hướng đối tượng
Giới thiệu
Trong các bài học trước, chúng ta đã học về CÁC TỪ KHÓA THỐNG KÊ TRONG OOP C #. Hôm nay chúng ta sẽ tìm hiểu về Kế thừa trong C #.
Đang xem: Thừa kế là gì?
Nội dung
Để đọc bài viết này, tốt nhất bạn nên có kiến thức cơ bản về các phần sau:
Trong bài học này, chúng ta sẽ tìm hiểu các vấn đề sau:
Khái niệm kế thừa. Khai báo và sử dụng kế thừa. Các vấn đề về thừa kế.
Khái niệm thừa kế
Thực tế, di sản Đó là sự kế thừa những gì của người khác để lại. Ví dụ, đứa trẻ được thừa kế tài sản của người cha ,. . .
Trong lập trình cũng vậy. Kế thừa trong lập trình là cách 1 lớp có thể thừa hưởng quay lại những thứ này tính chất, phương pháp từ một lớp khác và sử dụng chúng như của riêng bạn.
Một định nghĩa trừu tượng hơn về kế thừa: là một tính năng của ngôn ngữ hướng đối tượng được sử dụng để biểu diễn các mối quan hệ chuyên biệt hóa – tổng quát hóa giữa các lớp.
Ví dụ: Giả sử ta có một lớp TamGiac chứa thông tin tọa độ của 3 điểm A, B, C. Ta biết rằng tam giác cân là 1 trường hợp. đặc biệt của tam giác (ngược lại, tam giác là trường hợp tính tổng quát của một tam giác cân).
Từ đó ta có thể cho lớp TamGiacCan kế thừa lớp TamGiac để có thể sử dụng lại các thông tin như tọa độ của 3 điểm A, B, C mà không cần phải khai báo.
Ngoài ra, chúng ta có thể xem xét các lớp có đặc điểm tương tự, sau đó trích xuất các thành phần chung và tạo thành một lớp. Cuối cùng cho các lớp kế thừa từ lớp cha đó sử dụng lại thông tin mà không cần khai báo.
Tất nhiên, việc thừa kế không nên được thực hiện một cách bừa bãi và lạm dụng.
Ưu điểm của Thừa kế
Cho phép xây dựng một lớp mới từ một lớp hiện có. Lớp mới được gọi là lớp con (lớp con) đẹp Lớp có nguồn gốcLớp hiện có được gọi là lớp siêu cấp đẹp lớp cơ sởCho phép chia sẻ thông tin chung để sử dụng lại, đồng thời dễ nâng cấp, dễ bảo trì.
Khai báo và Sử dụng Kế thừa
Cú pháp
lớp :
Bên trong:
lớp là từ khóa để khai báo lớp. là tên của lớp mà chúng ta muốn kế thừa các thuộc tính của nó.
Sử dụng
lớp Động vật được bảo vệ trọng lượng gấp đôi; Chiều cao gấp đôi được bảo vệ; static int Legs được bảo vệ; public void Info () Console.WriteLine (”Cân nặng:” + Cân nặng + ”Chiều cao:” + Chiều cao + ”Chân:” + Chân); class Cat: Animal public Cat () / * Lớp Cat kế thừa lớp Animal mà các thuộc tính Cân nặng, Chiều cao, Chân có phạm vi được bảo vệ nên được phép kế thừa Từ đó, lớp Cat có thể sử dụng mà không cần phải khai báo * / Trọng lượng = 500; Chiều cao = 20; Chân = 2; Trong chức năng chủ chốt Hãy thử gọi phương thức Info để xem nó có hoạt động không:
Cat BlackCat = new Cat (); / * Lớp Cat kế thừa phương thức Info từ lớp Animal, vì vậy các đối tượng Cat có thể gọi phương thức Info () * / BlackCat.Info (); Kết quả khi chạy chương trình trên:
/B05_K%C3%AA%CC%81%20th%C6%B0%CC%80a%20trong%20L%C3%A2%CC%A3p%20tri%CC%80nh%20OOP/1_K%C3%AA%CC%81%20th%C6%B0%CC%80a%20trong%20L%C3%A2%CC%A3p%20tri%CC%80nh%20h%C6%B0%C6%A1%CC%81ng%20%C4%91%C3%B4%CC%81i%20t%C6%B0%C6%A1%CC%A3ng_Howkteam_com.png)
Bạn có thể thấy rằng nhờ tính kế thừa, các lớp con trở nên ngắn gọn hơn rất nhiều.
Ghi chú:
Trong C #, Không có hỗ trợ đa kế thừa (1 lớp kế thừa từ nhiều lớp) nhưng hỗ trợ triển khai nhiều giao diện (khái niệm giao diện sẽ trình bày ở bài sau). GIAO DIỆN TRONG C #).
Các thành viên của lớp cha có được kế thừa xuống lớp con hay không phụ thuộc vào phạm vi truy cập của thành phần.
Các thành phần có phạm vi riêng tư không thể kế thừa. Các thành phần có phạm vi được bảo vệ và công khai được phép kế thừa.
Các hàm tạo và hủy không được kế thừa.
Vấn đề thừa kế
Sự cố với hàm tạo và hàm hủy
Phương pháp khởi tạo Theo mặc định, lớp cha luôn được gọi mỗi khi một đối tượng của lớp con được khởi tạo. Và được gọi trước hàm tạo của lớp con.
Nếu lớp cha có một hàm tạo với các tham số, nó yêu cầu lớp con phải có hàm tạo tương ứng và gọi hàm tạo của lớp cha thông qua từ khóa cơ sở.
Ví dụ: Giả sử lớp Động vật có thêm 1 constructor có các thông số sau:
class Animal public Animal (double w, double h, int l) Weight = w; Chiều cao = h; Chân = l; Sau đó, lớp con kế thừa từ lớp Animal phải có constructor có các tham số tương ứng:
class Cat: Animal / * Cách gọi hàm tạo của lớp cha thông qua từ khóa base * / public Cat () Weight = 500; Chiều cao = 20; Chân = 2; / * Cách gọi hàm tạo của lớp cha thông qua từ khóa base * / public Cat (double w, double h, int l): base (w, h, l) Qua ví dụ trên bạn có thể dễ dàng nhận thấy phương pháp cú pháp để gọi constructor của lớp cha như sau:
công cộng () : cơ sở()
Bên trong:
là tên lớp con (lớp dẫn xuất). là danh sách tham số của phương thức khởi tạo lớp con.
Xem thêm: de-index là gì?
cơ sở là từ khóa để gọi hàm tạo của lớp cha. là danh sách tham số tương ứng với hàm tạo của lớp cha.
Khi đối tượng của lớp con bị phá hủy, phương thức hủy của nó sẽ được gọi trước và sau đó gọi phương thức hủy của lớp con để hủy những gì mà lớp con không thể phá hủy.
Vấn đề của hàm trùng tên và cách gọi phương thức của lớp cha
/B05_K%C3%AA%CC%81%20th%C6%B0%CC%80a%20trong%20L%C3%A2%CC%A3p%20tri%CC%80nh%20OOP/2_K%C3%AA%CC%81%20th%C6%B0%CC%80a%20trong%20L%C3%A2%CC%A3p%20tri%CC%80nh%20h%C6%B0%C6%A1%CC%81ng%20%C4%91%C3%B4%CC%81i%20t%C6%B0%C6%A1%CC%A3ng_Howkteam_com.png)
Xem lại ví dụ trên. Giả sử lớp Animal có một phương thức phức tạp tên là Thông tin(). Lớp Cat kế thừa lớp Animal, vì vậy nó cũng sẽ nhận phương thức này.
Bây giờ trong lớp Cat, chúng ta cũng định nghĩa một phương thức có tên Thông tin(), có kiểu trả về là void và không có tham số. Vậy câu lệnh sau sẽ gọi phương thức Info () nào?
Cat BlackCat = new Cat (); BlackCat.Info (); Câu trả lời là C # sẽ gọi phương thức Thông tin() của lớp mà Cat định nghĩa. Đồng thời đưa ra cảnh báo khi biên dịch.
Trong C #, từ khóa mới được hỗ trợ để đánh dấu đây là một hàm mới và hàm được kế thừa từ lớp cha sẽ bị ẩn, gây ra ngoài không thể được gọi.
Cụ thể, bạn sẽ thêm từ khóa mới vào trước phần khai báo hàm Info () trong lớp Cat.
public new void Info ()
Sau đó, hàm Thông tin() của lớp cha sẽ bị ẩn. Và mọi đối tượng ngoài chỉ có thể gọi hàm Thông tin() của lớp Cat.
Từ khóa này chỉ làm cho việc khai báo hàm rõ ràng Thông tin() nhưng về kết quả khi chạy chương trình sẽ không thay đổi.
Đây là một câu hỏi nữa được đặt ra: Vậy có cách nào để gọi hàm Info () của lớp cha nữa không?
Câu trả lời là có, nhưng nó chỉ có thể được gọi trong nội bộ lớp Cat.
Bạn có thể sử dụng từ khóa cơ sở để đại diện cho lớp cha và gọi các thành viên của lớp cha.
Ví dụ: chức năng gọi Thông tin() của lớp cha:
/ * Từ khóa new chỉ định đây là một hàm Info mới của lớp Cat * / public new void Info () Console.WriteLine (“Info of Cat:”); base.Info (); // gọi hàm Info () của lớp cha Kết quả khi gọi hàm Thông tin() của lớp Mèo là:
/B05_K%C3%AA%CC%81%20th%C6%B0%CC%80a%20trong%20L%C3%A2%CC%A3p%20tri%CC%80nh%20OOP/3_K%C3%AA%CC%81%20th%C6%B0%CC%80a%20trong%20L%C3%A2%CC%A3p%20tri%CC%80nh%20h%C6%B0%C6%A1%CC%81ng%20%C4%91%C3%B4%CC%81i%20t%C6%B0%C6%A1%CC%A3ng_Howkteam_com.png)
Vấn đề cấp phát bộ nhớ cho đối tượng
Thông thường, một đối tượng kiểu Animal không thể khởi tạo bộ nhớ kiểu Cat.
Animal cat = new Cat (); Câu lệnh này sẽ xuất hiện lỗi: “không thể chuyển từ kiểu Cat sang kiểu Animal”.
Nhưng nếu hai lớp này có mối quan hệ kế thừa thì điều này hoàn toàn ổn.
Thuộc tính này được trình bày như sau:
“Một đối tượng của lớp cha có thể tham chiếu đến vùng nhớ của đối tượng của lớp con, nhưng không phải ngược lại“.
Nghĩa là, nếu lớp Cat kế thừa từ lớp Animal, câu lệnh Animal cat = new Cat (); hoàn toàn đúng nhưng ngược lại Cat cat = new Animal (); sẽ báo lỗi.
Bạn cần lưu ý điều này. Bởi vì chúng ta muốn thể hiện tính đa hình trong lập trình, chúng ta phải sử dụng thuộc tính này.
Kết luận
Bài viết này sẽ giúp bạn hiểu:
Khái niệm kế thừa. Khai báo và sử dụng kế thừa. Các vấn đề về thừa kế.
Bài sau chúng ta sẽ tìm hiểu về Tính đa hình trong lập trình hướng đối tượng .
Xem thêm: Nhà hàng là gì? Chức năng và nhiệm vụ Nhận thức chung của các Bộ, Cơ quan ngang là gì
Xin cảm ơn quý khách hàng đã theo dõi bài viết. Hãy để lại ý kiến đóng góp của bạn để bài viết phát triển tốt hơn. Đừng quên “Thực hành – Thử thách – Không ngại khó“.