Rate this post

Đa hình là gì?

Từ đa hình là sự kết hợp của hai từ Hy Lạp poly, có nghĩa là nhiều và morph có nghĩa là biến đổi thành các dạng hoặc hình dạng khác nhau . Cùng nhau, tính đa hình có nghĩa là cùng một thực thể có thể được sử dụng dưới nhiều hình thức khác nhau. Trong khía cạnh lập trình, cùng một phương thức có thể được sử dụng trong các lớp khác nhau. Kỹ thuật này làm cho việc lập trình trở nên trực quan hơn và dễ tiếp cận hơn.

Các bài viết liên quan:

Ví dụ – Chúng ta có lớp Shape để xác định hình dạng của đối tượng. Hình dạng có thể là hình tròn, hình chữ nhật, hình vuông, đường thẳng, vv Vì vậy, ở đây mục tiêu là chung, nhưng cách tiếp cận là khác nhau.

Phương pháp ghi đè là một kỹ thuật để đạt được tính đa hình. Đôi khi, chúng ta muốn một đối tượng lớp con cung cấp các kết quả khác nhau cho cùng một phương thức khi đối tượng lớp con gọi nó. Điều này có thể được thực hiện bằng cách định nghĩa lại cùng một phương thức trong lớp con. Phương thức có cùng tên, cùng đối số và cùng kiểu trả về. Khi phương thức đó được gọi, phương thức của lớp con được thực thi thay vì phương thức được định nghĩa trong lớp cha.

Xem thêm Các lớp và Đối tượng ( Class vs Object )

Method override

Khi chúng ta khai báo cùng một phương thức trong lớp con, phương thức được định nghĩa trước đó trong lớp cha được gọi là phương thức ghi đè. Lớp con có thể định nghĩa cùng một phương thức bằng cách cung cấp phương thức triển khai riêng của nó, phương thức này đã tồn tại trong lớp cha. Phương thức trong lớp cha được gọi là ghi đè phương thức và phương thức trong lớp con được gọi là ghi đè phương thức . Hãy hiểu phương thức ghi đè trong ví dụ sau.

Ví dụ về Method override

Chúng tôi xác định hai lớp; đầu tiên, là một lớp con được gọi là Human, và lớp thứ hai là một Man. Lớp conBoy kế thừa lớp con Người. Phương thức giống nhau void showInfo () trong cả hai lớp được định nghĩa với cách triển khai khác nhau. Lớp con có định nghĩa riêng về void showInfo (). Hãy xem đoạn mã sau.

Ví dụ

class Human {
  // Phương thức bị ghi đè
  void run() {
    print("Con người đang chạy");
  }
}

class Man extends Human {
  // Phương thức ghi đè
  void run() {
    print("Man đang chạy");
  }
}

void main() {
  Man m = new Man();
  // Điều này sẽ gọi phiên bản lớp con của run ()
  m.run();
}

Giải trình:

Trong ví dụ trên, chúng ta đã định nghĩa một phương thức có cùng tên trong cả lớp con và lớp cha. Mục đích của việc ghi đè phương thức là cung cấp cho việc triển khai riêng của phương thức lớp con. Khi chúng ta tạo đối tượng của lớp con Boy, nó thực thi phương thức của lớp con và in Man is running thay vì Human is running.

Nếu chúng ta tạo đối tượng của một lớp cha, thì nó sẽ luôn được gọi là phương thức của lớp cha.

Hãy lấy một ví dụ khác trong đó chúng ta tạo hai Lớp được gọi là Cao đẳng và Sinh viên với phương thức chung void student_details (). Hãy xem đoạn mã sau.

Ví dụ 2

class Colleges {
  // Khai báo biến
  String? name;
  int? rollNo;

// Phương thức ghi đè
  void stu_details(name, rollno) {
    this.name = name;
    this.rollNo = rollno;
  }

  void display() {
    print("Tên sinh viên: ${name}");
    print("Rollno sinh vien: ${rollNo}");
    print("Kết quả được truyền vào");
  }
}

class Student extends Colleges {
// Phương thức ghi đè
  void stu_details(name, rollno) {
    this.name = name;
    this.rollNo = rollno;
  }

  void show() {
    print("Tên sinh viên: ${name}");
    print("Rollno sinh vien: ${rollNo}");
    print("Kết quả không thành công");
  }
}

  
void main() {
// Tạo đối tượng của lớp con
  Student st = new Student();
  st.stu_details("Joseph", 101);
  st.show();

// Tạo đối tượng của lớp cha
  Colleges cg = new Colleges();
  cg.stu_details("Jason", 102);
  cg.display();
}
 

Giải trình:

Trong ví dụ trên, chúng ta tạo hai lớp – Cao đẳng làm lớp cha và Sinh viên làm lớp con. Phương thức stu_details được định nghĩa trong cả hai lớp có cùng tham số và kiểu trả về giống nhau.

Bây giờ, lớp cha Cao đẳng được kế thừa bởi lớp con Sinh viên và phương thức stu_details () bị ghi đè trong lớp con.

Chúng tôi đã tạo đối tượng Student và gọi stu_details () với các đối số phù hợp. Nó thực thi phương thức lớp con, và sau đó nó in ra kết quả.

Giống như chúng ta đã tạo đối tượng của đối tượng lớp cao đẳng gọi các phương thức của nó và in ra các kết quả khác nhau.

Method override bằng super

Chúng ta có thể gọi phương thức của lớp cha mà không cần tạo đối tượng của nó. Nó có thể được thực hiện bằng cách sử dụng từ khóa super trong lớp con. Thành viên dữ liệu của lớp cha có thể được truy cập trong lớp con bằng cách sử dụng từ khóa super. Hãy hiểu ví dụ sau.

Ví dụ

class Human {
  // Phương thức bị ghi đè
  void run() {
    print("Con người đang chạy");
  }
}

class Man extends Human {
  // Phương thức ghi đè
  void run() {
    // Truy cập phương thức run () của lớp cha trong lớp con
    super.run();
    print("Cậu bé đang chạy");
  }
}

void main() {
// Tạo đối tượng của lớp con
  Man m = new Man();
  // Điều này sẽ gọi phiên bản lớp con của eat ()
  m.run();
}

Giải trình:

Trong chương trình trên, chúng ta đã truy cập vào phương thức lớp Human trong lớp con bằng cách sử dụng từ khóa super. Bây giờ, chúng ta không cần phải khởi tạo lớp cha. Chúng tôi chỉ tạo đối tượng của lớp con, đối tượng này gọi phương thức run () của lớp con và lớp cha.

Lưu ý – Khi chúng ta tạo đối tượng lớp con và gọi phương thức, nó sẽ thực thi phương thức của lớp cha (nếu được truy cập bằng từ khóa super) trước tiên, sau đó mới đến phương thức của lớp con.

Lợi thế của phương pháp override

Lợi ích chính của việc ghi đè phương thức là lớp con có thể cung cấp cách triển khai riêng của nó cho cùng một phương thức theo yêu cầu mà không cần thực hiện bất kỳ thay đổi nào trong phương thức lớp cha. Kỹ thuật này rất nhiều khi chúng ta muốn phương thức lớp con hoạt động khác với cùng một tên.

Quy tắc method override trong Dart

Dưới đây là một số quy tắc method override. Những điểm này phải được ghi nhớ trong khi khai báo cùng một phương thức trong lớp con.

  1. Phương thức ghi đè (phương thức lớp con) phải được khai báo cùng cấu hình với phương thức ghi đè (phương thức lớp cha). Kiểu trả về, danh sách các đối số và trình tự của nó phải giống với phương thức của lớp cha.
  2. Phương thức ghi đè phải được định nghĩa trong lớp con, không phải trong cùng một lớp.
  3. Phương thức tĩnh và phương thức cuối cùng không thể được kế thừa trong lớp con vì chúng có thể truy cập được trong lớp riêng của chúng
  4. Hàm tạo của lớp cha không thể được kế thừa trong lớp con.
  5. Một phương thức không thể được kế thừa, thì nó không thể được ghi đè.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now