- Đặc điểm của thừa kế
- Hệ thống cấp bậc
- Tính đa hình
- Các loại thừa kế
- Kế thừa duy nhất
- Kế thừa đa cấp
- Kế thừa phân cấp
- Thừa kế lai
- Nhiều thừa kế
- Các kiểu kế thừa từ một lớp cơ sở
- Thừa kế công khai
- Kế thừa được bảo vệ
- Thừa kế riêng
- Ví dụ
- Ví dụ Python
- Ví dụ trong C ++
- Người giới thiệu
Kế thừa trong lập trình hướng đối tượng là cách tổ chức các đối tượng theo một hệ thống phân cấp từ cái chung đến cái riêng. Nó là tiện ích được sử dụng để mở rộng một lớp thành một lớp khác, duy trì một quá trình thực thi tương tự.
Trong hầu hết các ngôn ngữ hướng đối tượng dựa trên lớp, một đối tượng được tạo thông qua kế thừa, được gọi là đối tượng con, nhận tất cả các thuộc tính và hành vi của đối tượng mẹ.

Bằng chứng đơn giản về kế thừa trong hướng đối tượng. Nguồn: Pluke / CC0 Creative Commons CC0 1.0 Universal Public Domain
Vì vậy, nó là phẩm chất thể hiện mối quan hệ giữa các giai cấp khác nhau. Kế thừa cho phép một lớp có cùng hành vi với lớp khác và mở rộng hoặc điều chỉnh hành vi đó để cung cấp một hành động đặc biệt cho các nhu cầu cụ thể.
Kế thừa có thể giúp đại diện cho các đối tượng có một số khác biệt và một số điểm tương đồng trong cách chúng hoạt động. Bạn có thể đặt tất cả các chức năng mà các đối tượng có chung trong một lớp cơ sở, rồi xác định một hoặc nhiều lớp con với chức năng tùy chỉnh của riêng bạn.
Đặc điểm của thừa kế
Tính kế thừa là một trong những đặc điểm chính của lập trình hướng đối tượng, được sử dụng để định nghĩa một lớp mới từ các lớp hiện có.
Nghĩa là, các lớp mới có thể được bắt nguồn từ các lớp cơ sở hiện có, thêm các tính năng mới. Bạn không cần phải viết từ đầu. Do đó, kế thừa cung cấp một cách để dễ dàng sử dụng lại mã hiện có.
Nếu bạn đã có một lớp thực hiện hầu hết mọi thứ bạn muốn, bạn có thể tạo một lớp con trong đó một số hành vi của nó bị ghi đè một phần hoặc có thể một số chức năng mới được thêm vào.
Một lớp dẫn xuất kế thừa tất cả các phương thức của lớp cơ sở, ngoại trừ các phương thức sau:
- Các hàm tạo, hàm hủy và sao chép các hàm tạo của lớp cơ sở.
- Các toán tử quá tải từ lớp cơ sở.
- Chức năng thân thiện với lớp cơ sở.
Hệ thống cấp bậc
Như một cây gia đình, kế thừa đóng vai trò tạo thành một hệ thống phân cấp các lớp. Điều quan trọng cần lưu ý là các thuộc tính được xác định cho một lớp cơ sở sẽ tự động hiện diện trong lớp dẫn xuất. Ngoài ra, các phương thức cho lớp cơ sở sẽ hoạt động cho các dẫn xuất.
Một lớp được cho là một lớp con của lớp mà nó kế thừa. Mặt khác, lớp này sẽ là lớp cha của bạn. Lớp chung nhất có thể được gọi là lớp cơ sở, vì nó nằm ở cơ sở của cấu trúc phân cấp.
Tính đa hình
Tính kế thừa rất phổ biến trong một số ngôn ngữ với kiểu tĩnh, vì nó cho phép người lập trình tránh một số hạn chế của kiểu tĩnh.
Một đối tượng kế thừa từ một đối tượng khác được coi là một kiểu con của đối tượng đó. Một ví dụ có thể là các đối tượng "người hướng dẫn" và "sinh viên", mỗi đối tượng kế thừa từ "người".
Nếu giảng viên và sinh viên thuộc cùng một kiểu người, bạn có thể viết một hàm chấp nhận kiểu người đó làm tham số và hoạt động trên các đối tượng giảng viên và sinh viên, vì cả hai đều là người thừa kế.
Các loại thừa kế
Kế thừa duy nhất
Khi một lớp dẫn xuất kế thừa các thuộc tính và hành vi của một lớp cơ sở duy nhất. Đó là, một lớp chỉ mở rộng cho một lớp khác.
Kế thừa đa cấp
Đề cập đến tiện ích mà bạn có thể kế thừa từ một lớp dẫn xuất, làm cho lớp dẫn xuất này trở thành lớp cơ sở cho một lớp mới. Nghĩa là, nó dẫn đến kết quả khi một lớp dẫn xuất được tạo từ một lớp dẫn xuất khác.
Kế thừa phân cấp
Trong sự kế thừa này, nhiều lớp con kế thừa từ một lớp duy nhất. Nghĩa là, nó xảy ra khi một lớp cơ sở duy nhất được kế thừa bởi nhiều hơn một lớp dẫn xuất.
Thừa kế lai
Nó là kết quả kế thừa khi bất kỳ kế thừa nào trong ba kế thừa trước đó được kết hợp (đơn, phân cấp và đa cấp).
Nhiều thừa kế
Nó tương ứng với con số kế thừa khi một lớp kế thừa từ nhiều hơn một lớp cha. Hạn chế của kiểu kế thừa này là lớp dẫn xuất sẽ phải xử lý sự phụ thuộc mà nó có trên hai lớp cơ sở.
Mặt khác, kiểu kế thừa này cho phép người lập trình xây dựng các lớp kết hợp các khía cạnh của nhiều lớp và các phân cấp tương ứng của chúng.
Các kiểu kế thừa từ một lớp cơ sở
Thừa kế công khai
Khi một lớp được dẫn xuất từ lớp cơ sở công khai, các thành viên công khai của lớp cơ sở trở thành thành viên công khai của lớp dẫn xuất và các thành viên được bảo vệ của lớp cơ sở trở thành thành viên được bảo vệ của lớp dẫn xuất.
Các thành viên riêng của một lớp cha sẽ không bao giờ có thể truy cập trực tiếp từ một lớp dẫn xuất, nhưng có thể được truy cập bằng các lệnh gọi công khai và các thành viên được bảo vệ của lớp cơ sở.
Kế thừa được bảo vệ
Khi bạn tạo một lớp kế thừa từ lớp cha được bảo vệ, cả thành viên công khai và được bảo vệ của lớp cha này sẽ trở thành thành viên được bảo vệ của lớp dẫn xuất.
Thừa kế riêng
Khi một lớp con được tạo ra từ lớp cha riêng tư, các thành viên công khai và được bảo vệ của lớp cha này sẽ trở thành thành viên riêng của lớp con.
Ví dụ
Ví dụ Python
Để cho thấy nguyên tắc kế thừa hoạt động như thế nào, chúng ta sẽ sử dụng rô bốt hoặc một loại rô bốt tốt hơn trong ngôn ngữ lập trình Python. Để làm điều này, một lớp có tên là RobotMédico (PhysicianRobot) sẽ được chỉ định, lớp này có nguồn gốc từ siêu lớp Robot.

Nếu bạn nhìn vào mã của lớp RobotMédico, bạn có thể thấy rằng không có thuộc tính hoặc phương thức nào được định nghĩa trong lớp này.
Vì lớp RobotMedico là một lớp con của Robot nên nó kế thừa cả hai phương thức __init__ và say_hi trong trường hợp này. Kế thừa các phương thức này có nghĩa là chúng có thể được sử dụng như thể chúng đã được định nghĩa trong lớp RobotMédico.
Khi một phiên bản của RobotMedico được tạo, hàm __init__ cũng sẽ tạo một thuộc tính tên. Phương thức say_hi có thể được áp dụng cho đối tượng “y” của RobotMédico, như có thể thấy trong kết quả của đoạn mã trước đó.
Ví dụ trong C ++
Một lớp có thể kế thừa từ nhiều hơn một lớp, có nghĩa là nó có thể kế thừa dữ liệu và chức năng từ nhiều lớp cha. Để định nghĩa một lớp dẫn xuất, bạn sử dụng danh sách dẫn xuất lớp để chỉ định các lớp cơ sở.
Danh sách dẫn xuất lớp trong C ++ đặt tên cho một hoặc nhiều lớp cơ sở và có dạng sau: lớp dẫn xuất lớp: lớp cơ sở access-specifier, trong đó access-specifier là công khai, được bảo vệ hoặc riêng tư và lớp cơ sở là tên của một lớp đã xác định trước đó. Nếu chỉ định truy cập không được sử dụng, quyền riêng tư được lấy theo mặc định.
Lớp cha "Hình dạng" và lớp dẫn xuất của nó "Hình chữ nhật" có thể được coi như sau:

Khi đoạn mã trên được biên dịch và thực thi, kết quả sau xuất hiện: "Tổng diện tích: 35".
Người giới thiệu
- Dave Braunschweig (2020). Thừa kế và Đa hình. Cộng đồng Rebus. Lấy từ: press.rebus.community.
- Khóa học Python (2020). Di sản. Lấy từ: python-course.eu.
- Người cố vấn dữ liệu (2020). R Tính kế thừa. Lấy từ: datamentor.io.
- Điểm hướng dẫn (2020). Kế thừa C ++. Lấy từ: tutorialspoint.com.
- Thông tin mạng (2020). Các loại thừa kế khác nhau. Lấy từ: net-informations.com.
