Đề XuấT, 2024

Editor Choice

Sự khác biệt giữa tính kế thừa và tính đa hình

Kế thừa cho phép, khả năng sử dụng lại mã và tính đa hình là, sự xuất hiện của một chức năng với hình thức khác nhau. Sự khác biệt cơ bản giữa tính kế thừa và tính đa hình là sự kế thừa cho phép mã đã có sẵn được sử dụng lại trong một chương trình và tính đa hình cung cấp một cơ chế để tự động quyết định dạng hàm nào được gọi.

Biểu đồ so sánh

Cơ sở để so sánhDi sảnĐa hình
Căn bảnKế thừa đang tạo ra một lớp mới bằng cách sử dụng các thuộc tính của lớp đã tồn tại.Đa hình về cơ bản là một giao diện phổ biến cho nhiều hình thức.
Thực hiệnKế thừa về cơ bản được thực hiện trên các lớp.Đa hình về cơ bản được thực hiện trên chức năng / phương pháp.
Sử dụngĐể hỗ trợ khái niệm tái sử dụng trong OOP và giảm độ dài của mã.Cho phép đối tượng quyết định hình thức nào của hàm sẽ được gọi khi nào, tại thời gian biên dịch (nạp chồng) cũng như thời gian chạy (ghi đè).
Các hình thứcKế thừa có thể là một thừa kế đơn, thừa kế nhiều, thừa kế đa cấp, thừa kế phân cấp và thừa kế lai.Đa hình có thể là đa hình thời gian biên dịch (quá tải) hoặc đa hình thời gian chạy (ghi đè).
Thí dụLớp 'bàn' có thể kế thừa tính năng của lớp 'đồ nội thất', vì 'bàn' là 'đồ nội thất'.Lớp 'learn_table' cũng có thể có hàm 'set_color ()' và một lớp 'Dining_table' cũng có thể có hàm 'set_color ()', do đó, hình thức của hàm set_color () để gọi có thể được quyết định ở cả hai, biên dịch thời gian và thời gian chạy

Định nghĩa kế thừa:

Kế thừa là một trong những tính năng quan trọng của OOP, hỗ trợ mạnh mẽ cho khả năng tái sử dụng của hồi giáo. Khả năng sử dụng lại có thể được mô tả là tạo ra một lớp mới bằng cách sử dụng lại các thuộc tính của lớp hiện có. Trong thừa kế, có một lớp cơ sở, được kế thừa bởi lớp dẫn xuất. Khi một lớp kế thừa bất kỳ lớp nào khác, (các) thành viên của lớp cơ sở sẽ trở thành thành viên của lớp dẫn xuất.

Hình thức chung của việc kế thừa một lớp như sau:

 class origin-class-name: access-specifier base-class-name {// body của lớp}; 

Ở đây, bộ xác định truy cập cung cấp chế độ truy cập (riêng tư, công khai, được bảo vệ) cho (các) thành viên trong lớp cơ sở cho lớp dẫn xuất. Nếu không có trình xác định truy cập nào, thì theo mặc định, nó được coi là riêng tư. Trong C ++, nếu lớp dẫn xuất là có cấu trúc, thì bộ xác định truy cập là mặc định công khai.

Trong C ++, sự kế thừa có thể đạt được dưới năm hình thức. Chúng có thể được phân loại là: -

  • Kế thừa đơn (chỉ có một siêu hạng)
  • Đa kế thừa (một số siêu lớp)
  • Kế thừa phân cấp (một siêu lớp, nhiều lớp con)
  • Đa kế thừa (xuất phát từ một lớp dẫn xuất)

Trong Java, lớp kế thừa lớp khác bằng cách sử dụng từ khóa mà Ext sẽ mở rộng ra. Trong Java, lớp cơ sở được gọi là siêu lớp và lớp dẫn xuất được gọi là lớp con. Một lớp con không thể truy cập vào các thành viên của lớp cơ sở, được khai báo là riêng tư. Biểu mẫu chung kế thừa lớp trong Java như sau.

 tên lớp dẫn xuất lớp mở rộng tên lớp cơ sở {// thân của lớp}; 

Java không hỗ trợ kế thừa nhiều kế thừa, trong khi nó hỗ trợ phân cấp nhiều cấp. Trong Java, đôi khi một siêu lớp có thể muốn ẩn các chi tiết triển khai của nó và nó làm cho một phần của dữ liệu đó là riêng tư. Như trong Java, một lớp con không thể truy cập các thành viên riêng của lớp cha và nếu một lớp con muốn truy cập hoặc khởi tạo các thành viên đó, thì Java cung cấp một giải pháp. Lớp con có thể giới thiệu các thành viên của siêu lớp ngay lập tức của nó bằng cách sử dụng từ khóa siêu siêu. Hãy nhớ rằng, bạn chỉ có thể truy cập các thành viên của siêu lớp ngay lập tức.

'Siêu' có hai dạng chung. Đầu tiên là, nó sử dụng để gọi hàm tạo của siêu lớp. Thứ hai là, để truy cập vào thành viên của siêu lớp đã bị ẩn bởi thành viên của lớp con.

 // hình thức đầu tiên của việc gọi hàm tạo. class supper_group {supper_group (argument_list) {..} // constructor của super class}; class sub_group mở rộng supper_group {sub_group (argument_list) {..} // constructor của sub_ class super (argument_list); // sub_ class gọi hàm tạo của super class}}; 
 // giây cho 'siêu' lớp supper_group {int i; } lớp sub_group mở rộng supper_group {int i; lớp con (int a, int b) {super.i = a; // 'i' của siêu hạng i = b; // 'i' của lớp con}}; 

Định nghĩa đa hình

Thuật ngữ đa hình đơn giản có nghĩa là 'một chức năng, nhiều hình thức'. Đa hình đạt được ở cả thời gian biên dịch và thời gian chạy. Tính đa hình về thời gian biên dịch đạt được thông qua việc nạp chồng dữ liệu trong khi đó, tính đa hình thời gian chạy đạt được thông qua việc ghi đè lên.

Tính đa hình cho phép đối tượng quyết định hình thức của hàm nào được gọi khi cả hai, biên dịch thời gian và thời gian chạy.
Hãy thảo luận về khái niệm đầu tiên của quá tải. Khi quá tải, chúng ta định nghĩa một hàm trong lớp nhiều hơn một lần với các kiểu dữ liệu và số lượng tham số khác nhau trong khi hàm bị quá tải phải có cùng kiểu trả về. Hầu hết các hàm cho các hàm bị quá tải là các hàm tạo của lớp.

 quá tải lớp {int a, b; công khai: int quá tải (int x) {// hàm quá tải đầu tiên () constructor a = x; trả lại a; } int quá tải (int x, int y) {// giây quá tải () constructor a = x; b = y; trả lại a * b; }}; int main () {quá tải O1; O1.overload (20); // hàm tạo quá tải đầu tiên () gọi O1.overload (20, 40); // lệnh quá tải thứ hai () constructor} 

Bây giờ, hãy thảo luận về hình thức đa hình thứ hai, tức là ghi đè. Khái niệm ghi đè chỉ có thể được thực hiện theo chức năng của các lớp cũng thực hiện khái niệm kế thừa. Trong C ++, chức năng bị ghi đè được bắt đầu bằng từ khóa Cồn ảo ảo trong lớp cơ sở và được định nghĩa lại trong lớp dẫn xuất với cùng một nguyên mẫu ngoại trừ từ khóa ảo ảo.

 lớp cơ sở {công khai: virtual void func () {// hàm ảo của cout lớp cơ sở << "Đây là func ()" của lớp cơ sở; }}; class origin1: public base {public: void func () {// hàm ảo của lớp cơ sở được định nghĩa lại trong cout class1 

Sự khác biệt chính giữa Kế thừa và Đa hình

  1. Kế thừa đang tạo ra một lớp có được tính năng của nó từ một lớp đã có sẵn. Mặt khác, đa hình là một giao diện có thể được xác định dưới nhiều hình thức.
  2. Kế thừa được thực hiện trên các lớp trong khi đó, tính đa hình được thực hiện trên các phương thức / hàm.
  3. Vì tính kế thừa cho phép một lớp dẫn xuất sử dụng các phần tử và phương thức được định nghĩa trong lớp cơ sở, lớp dẫn xuất không cần định nghĩa lại các phần tử đó hoặc phương thức đó, vì vậy chúng ta có thể nói nó làm tăng khả năng sử dụng lại mã và do đó, làm giảm độ dài của mã . Mặt khác, tính đa hình làm cho một đối tượng có thể quyết định hình thức của phương thức mà nó muốn gọi ở cả thời gian biên dịch và thời gian chạy.
  4. Kế thừa có thể được phân loại là thừa kế đơn, thừa kế nhiều, thừa kế đa cấp, thừa kế phân cấp và thừa kế lai. Mặt khác, đa hình được phân loại là quá tải và ghi đè.

Phần kết luận:

Kế thừa và đa hình là các khái niệm có liên quan với nhau, vì đa hình động áp dụng cho các lớp cũng thực hiện khái niệm kế thừa.

Top