Tính đa hình trong Java OOPs với ví dụ

Mục lục:

Anonim

Đa hình trong Java là gì?

Tính đa hình trong Java xảy ra khi có một hoặc nhiều lớp hoặc đối tượng liên quan đến nhau theo tính kế thừa. Nói cách khác, nó là khả năng của một đối tượng có nhiều dạng. Tính kế thừa cho phép người dùng kế thừa các thuộc tính và phương thức, và tính đa hình sử dụng các phương thức này để thực hiện các tác vụ khác nhau. Vì vậy, mục tiêu là giao tiếp nhưng cách tiếp cận là khác nhau.

Ví dụ, bạn có một chiếc điện thoại thông minh để liên lạc. Chế độ giao tiếp bạn chọn có thể là bất cứ điều gì. Nó có thể là một cuộc gọi, một tin nhắn văn bản, một tin nhắn hình ảnh, mail,… Vì vậy, mục tiêu chung là giao tiếp, nhưng cách tiếp cận của họ khác nhau. Đây được gọi là Đa hình.

Trong hướng dẫn này, bạn sẽ học-

  • Đa hình là gì?
  • Tính đa hình của Java trong OOP với ví dụ
  • Ghi đè phương pháp
  • Sự khác biệt giữa quá tải và ghi đè
  • Đa hình động là gì?
  • Siêu từ khóa
  • Sự khác biệt giữa Đa hình tĩnh và động

Bấm vào đây nếu video không thể truy cập được

Tính đa hình của Java trong OOP với ví dụ

Chúng tôi có một lớp cha, 'Tài khoản' với chức năng gửi và rút tiền. Tài khoản có 2 hạng con Thao tác gửi và rút tiền giống nhau đối với tài khoản Tiết kiệm và Tài khoản séc. Vì vậy, các phương thức kế thừa từ lớp Tài khoản sẽ hoạt động.

Thay đổi yêu cầu phần mềm

Có một sự thay đổi trong đặc tả yêu cầu, một điều quá phổ biến trong ngành công nghiệp phần mềm. Bạn phải thêm Tài khoản Ngân hàng đặc quyền có chức năng với Tiện ích thấu chi.

Về cơ bản, thấu chi là một phương tiện mà bạn có thể rút một số tiền nhiều hơn số dư khả dụng trong tài khoản của mình.

Vì vậy, phương thức rút tiền cho các nhu cầu đặc quyền phải được thực hiện mới. Nhưng bạn không thay đổi đoạn mã đã thử nghiệm trong tài khoản Tiết kiệm và séc. Đây là lợi thế của OOPS

Bước 1) Như vậy khi phương thức "rút tiền" để lưu tài khoản được gọi là phương thức từ lớp tài khoản mẹ được thực thi.

Bước 2) Nhưng khi phương thức "Rút tiền" cho tài khoản đặc quyền (cơ sở thấu chi) được gọi là phương thức rút tiền được xác định trong lớp đặc quyền được thực thi. Đây là Đa hình.

Ghi đè phương pháp

Ghi đè phương thức là định nghĩa lại một phương thức siêu lớp trong một lớp con.

Quy tắc ghi đè phương pháp

  • Chữ ký phương thức tức là tên phương thức, danh sách tham số và kiểu trả về phải khớp chính xác.
  • Phương thức overridden có thể mở rộng khả năng truy cập nhưng không thu hẹp nó, tức là nếu nó là private trong lớp cơ sở, thì lớp con có thể đặt nó ở chế độ công khai nhưng không phải ngược lại.

Thí dụ

class Doctor{public void treatPatient(){// treatPatient method}class Surgeon extends Doctor{public void treatPatient(){// treatPatient method}}Class run{public static void main (String args[]){Doctor doctorObj = new Doctor()// treatPatient method in class Doctor will be executeddoctorObj.treatPatient();Surgeon surgeonObj = new Surgeon();// treatPatient method in class Surgeon will be executedsurgeonObj.treatPatient();}}

Sự khác biệt giữa quá tải và ghi đè

Quá tải phương thức Ghi đè phương pháp

Nạp chồng phương thức nằm trong cùng một lớp, trong đó nhiều phương thức có cùng tên nhưng khác chữ ký.

Ghi đè phương thức là khi một trong các phương thức trong lớp siêu được định nghĩa lại trong lớp con. Trong trường hợp này, chữ ký của phương thức vẫn được giữ nguyên.

Ví dụ:

void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b);

Ví dụ:

class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}}

Đa hình động là gì?

Đa hình động là cơ chế mà nhiều phương thức có thể được xác định với cùng tên và chữ ký trong lớp cha và lớp con. Lệnh gọi đến một phương thức được ghi đè sẽ được giải quyết tại thời điểm chạy.

Ví dụ về tính đa hình động:

Một biến tham chiếu của lớp siêu có thể tham chiếu đến một đối tượng lớp con

Doctor obj = new Surgeon();

Xem xét tuyên bố

obj.treatPatient();

Ở đây, biến tham chiếu "obj" là của lớp cha, nhưng đối tượng mà nó trỏ đến là của lớp con (như trong sơ đồ).


obj.treatPworthy () sẽ thực thi phương thức TreatPworthy () của lớp con - Bác sĩ phẫu thuật

Nếu một tham chiếu lớp cơ sở được sử dụng để gọi một phương thức, thì phương thức được gọi là do JVM quyết định, tùy thuộc vào đối tượng mà tham chiếu đang trỏ đến

Ví dụ: mặc dù obj là một tham chiếu đến Bác sĩ, nó gọi là phương pháp Bác sĩ phẫu thuật, vì nó trỏ đến một đối tượng Bác sĩ phẫu thuật

Điều này được quyết định trong thời gian chạy và do đó được gọi là đa hình động hoặc thời gian chạy

Siêu từ khóa

Điều gì sẽ xảy ra nếu phương thức TreatPonian trong lớp Bác sĩ phẫu thuật muốn thực thi chức năng được xác định trong lớp Bác sĩ và sau đó thực hiện chức năng cụ thể của riêng nó?
Trong trường hợp này, từ khóa

supercó thể được sử dụng để truy cập các phương thức của lớp cha từ lớp con.
Phương pháp điều trị trong lớp Bác sĩ phẫu thuật có thể được viết là:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

Từ khóa super có thể được sử dụng để truy cập bất kỳ thành viên dữ liệu hoặc các phương thức của lớp siêu trong lớp con.Ví dụ: -Để học từ khóa Thừa kế, Đa hình & siêu

Bước 1) Sao chép mã sau vào Trình chỉnh sửa

public class Test{public static void main(String args[]){X x= new X();Y y = new Y();y.m2();//x.m1();//y.m1();//x = y;// parent pointing to object of child//x.m1() ;//y.a=10;}}class X{private int a;int b;public void m1(){System.out.println("This is method m1 of class X");}}class Y extends X{int c; // new instance variable of class Ypublic void m1(){// overriden methodSystem.out.println("This is method m1 of class Y");}public void m2(){super.m1();System.out.println("This is method m2 of class Y");}}

Bước 2) Lưu, biên dịch và chạy mã. Quan sát đầu ra.
Bước 3) Bỏ ghi chú dòng # 6-9. Lưu, biên dịch và chạy mã. Quan sát đầu ra.
Bước 4) Dòng bỏ ghi chú # 10. Lưu & Biên dịch mã.
Bước 5) Lỗi =? Điều này là do lớp con không thể truy cập các thành viên riêng của lớp siêu.

Sự khác biệt giữa Đa hình tĩnh và động

Tính đa hình tĩnh Đa hình động
Nó liên quan đến quá tải phương thức. Nó liên quan đến ghi đè phương thức.

Các lỗi, nếu có, sẽ được giải quyết tại thời điểm biên dịch. Vì mã không được thực thi trong quá trình biên dịch, do đó có tên là tĩnh.

Ví dụ:

void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error.

Trong trường hợp một biến tham chiếu đang gọi một phương thức được ghi đè, phương thức được gọi sẽ được xác định bởi đối tượng, biến tham chiếu của bạn đang trỏ đến. Điều này chỉ có thể được xác định trong thời gian chạy khi mã đang được thực thi, do đó có tên là động.

Ví dụ:

//reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient();