ประเภทของความหลากหลายใน Java [ความหลากหลายแบบคงที่และแบบไดนามิกพร้อมตัวอย่าง]

เผยแพร่แล้ว: 2021-06-18

สารบัญ

Polymorphism ใน Java คืออะไร?

แนวคิดที่สำคัญอย่างหนึ่งใน Object Oriented Programming (OOP) คือ พหุสัณฐาน ซึ่งหมายความว่าการดำเนินการเดียวสามารถทำได้ในรูปแบบต่างๆ มาจากคำภาษากรีก: poly และ morphs หมายถึงหลายรูปแบบ มีรูปแบบที่แตกต่างกันเมื่อมีความเกี่ยวข้องกันโดยการสืบทอด

เช่นเดียวกับการสืบทอดที่สืบทอดเมธอดและคุณลักษณะจากคลาสอื่น ความหลากหลายใช้เมธอดเหล่านั้นและทำงานต่างกัน วัตถุสามารถหล่อหลอมตัวเองให้อยู่ในรูปแบบต่างๆ ผ่านความหลากหลายทางสัณฐานวิทยา

กล่าวคือ เอนทิตีสามารถดำเนินการต่างๆ ในสถานการณ์ต่างๆ ได้ การใช้งาน polymorphism ทั่วไปอย่างหนึ่งใน Object Oriented Programming คือเมื่อมีการใช้การอ้างอิงคลาสพาเรนต์เพื่ออ้างถึงอ็อบเจ็กต์คลาสย่อย อ่านเพิ่มเติมเกี่ยวกับแนวคิดและตัวอย่าง OOP ต่างๆ

Polymorphism ใน Java สามารถทำได้สามวิธี:

การ แทนที่เมธอด: หากซูเปอร์คลาสและคลาสย่อยประกอบด้วยเมธอดเดียวกัน การแทนที่เมธอดหมายถึงกระบวนการแทนที่เมธอดในซูเปอร์คลาสด้วยเมธอดในคลาสย่อย ด้วยเหตุนี้ วิธีการเดียวกันนี้จึงถูกใช้ในสภาวะต่างๆ

ผลลัพธ์ของโปรแกรม:

ภาษาการเขียนโปรแกรม Java

ภาษาอังกฤษทั่วไป

  1. วิธีการโอเวอร์โหลด: วิธีการโอเวอร์โหลดหมายถึงกระบวนการสร้างเมธอดที่มีชื่อเดียวกัน แต่มีพารามิเตอร์ต่างกัน ตัวอย่าง ได้แก่ void func() { … } void func(int a) { … } float func(double a) { … } float func(int a float b) { … }

เอาท์พุต

**********

##########

  1. โอเปอเรเตอร์โอเวอร์โหลด: โอเปอเรเตอร์โอเวอร์โหลดเป็นแนวคิดใน Java ที่ตัวดำเนินการทำงานแตกต่างไปจากตัวถูกดำเนินการที่ต่างกัน ตัวอย่าง ได้แก่
  • ตัวดำเนินการ "+" สามารถใช้ได้ทั้งในการบวกตัวเลขและการต่อสตริง
การบวกเลข การต่อสายอักขระ
int a = 5;

int b = 6;

int sum = a + b; // เอาต์พุต = 11

สตริงแรก = "Python";

สตริงที่สอง = "การเขียนโปรแกรม";

ชื่อ = แรก + วินาที; // เอาต์พุต = การเขียนโปรแกรม Python

  • ตัวดำเนินการ &,|, และ ! สามารถใช้สำหรับการโอเวอร์โหลดแบบลอจิคัลและระดับบิต

ประเภทของความหลากหลายในภาษาชวา

การ เขียนโปรแกรมเชิงวัตถุมุ่งเน้นไปที่แนวคิดพื้นฐานสี่ประการ ได้แก่ นามธรรม การห่อหุ้ม การสืบทอด และความหลากหลาย Polymorphism คือความสามารถในการประมวลผลวัตถุที่แตกต่างกันโดยพิจารณาจากคลาสและประเภทข้อมูล

polymorphism ใน Java มีอยู่สองประเภท : compile time polymorphism และ run time polymorphism ใน java พหุสัณฐานของจาวา นี้ เรียกอีกอย่างว่าพหุสัณฐานคงที่และพหุสัณฐานแบบไดนามิก

1. Static polymorphism (หรือ compile-time polymorphism)

เช่นเดียวกับภาษาการเขียนโปรแกรม OOP อื่น ๆ ส่วนใหญ่ Java polymorphism ช่วยให้สามารถรวมวิธีการต่างๆ ภายในคลาสได้ เมธอดใช้ชื่อเดียวกันแต่พารามิเตอร์ต่างกัน นี่แสดงถึงความหลากหลายแบบคงที่ ความหลากหลายนี้ได้รับการแก้ไขในช่วงเวลาของคอมไพเลอร์และทำได้โดยใช้วิธีการโอเวอร์โหลด มีเกณฑ์สามข้อซึ่งชุดพารามิเตอร์ต้องแตกต่างกัน:

  • หมายเลขพารามิเตอร์ควรแตกต่างกัน
  • ประเภทพารามิเตอร์ควรแตกต่างกัน
  • ลำดับของพารามิเตอร์ต่างกัน ตัวอย่างเช่น ถ้าเมธอดยอมรับสตริงและสตริงแบบยาว ในขณะที่เมธอดอื่นยอมรับสตริงแบบยาวและแบบยาว อย่างไรก็ตาม คำสั่งประเภทนี้ทำให้ API เข้าใจได้ยาก

เนื่องจากความแตกต่างในพารามิเตอร์ ทุกวิธีจึงมีลายเซ็นที่แตกต่างกัน คอมไพเลอร์ Java มีแนวคิดที่เรียกว่าเมธอด

เรียนรู้ หลักสูตรซอฟต์แวร์ ออนไลน์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

ตัวอย่างของความหลากหลายคงที่

วิธีหนึ่งที่ Java รองรับความหลากหลายแบบคงที่คือวิธีการโอเวอร์โหลด ตัวอย่างที่แสดงกรณีของวิธีการโอเวอร์โหลดใน static polymorphism แสดงไว้ด้านล่าง:

ตัวอย่าง:

คลาส SimpleCalculator

{

int เพิ่ม (int a, int b)

{

กลับ a+b;

}

int เพิ่ม (int a, int b, int c)

{

กลับ a+b+c;

}

}

สาธิตคลาสสาธารณะ

{

โมฆะคงที่สาธารณะหลัก (สตริง args[])

{

SimpleCalculator obj = SimpleCalculator ใหม่ ();

System.out.println(obj.add(25, 25));

System.out.println(obj.add(25, 25, 30));

}

}

ผลลัพธ์ของโปรแกรม

50

80

2. Dynamic Polymorphism (หรือรันไทม์พหุสัณฐานใน Java)

ในรูปแบบ polymorphism ใน java นี้ คอมไพเลอร์ไม่ได้กำหนดวิธีการดำเนินการ เป็น Java Virtual Machine (JVM) ที่ดำเนินการตามกระบวนการในขณะใช้งาน ความหลากหลายแบบไดนามิกหมายถึงกระบวนการเมื่อการเรียกไปยังกระบวนการที่ถูกแทนที่ได้รับการแก้ไขในขณะดำเนินการ ตัวแปรอ้างอิงของซูเปอร์คลาสเรียกเมธอดที่ถูกแทนที่ เมธอดที่นำมาใช้โดยทั้งซับคลาสและซูเปอร์คลาสมีฟังก์ชันการทำงานที่แตกต่างกันในขณะที่ใช้ชื่อเดียวกันร่วมกัน

การทำความเข้าใจกระบวนการ Upcasting เป็นสิ่งสำคัญก่อนที่จะเข้าใจแนวคิดเกี่ยวกับความแตกต่างของเวลาทำงาน Upcasting หมายถึงกระบวนการที่อ็อบเจ็กต์ของคลาสลูกถูกอ้างถึงโดยตัวแปรอ้างอิงของซูเปอร์คลาส เรียนรู้เกี่ยวกับความหลากหลายใน PHP

ตัวอย่างของ Dynamic polymorphism (หรือรันไทม์)

ตัวอย่างที่ 1:

สองคลาส Bike และ Splendor ถูกสร้างขึ้น และคลาสของ Splendour ขยายคลาสของ Bike ที่แทนที่เมธอด run() เมธอด run() ถูกเรียกโดยตัวแปรอ้างอิงของคลาสพาเรนต์ เนื่องจากเมธอดคลาสย่อยกำลังแทนที่เมธอดคลาสพาเรนต์ เมธอด subclass ถูกเรียกใช้ขณะรันไทม์

โปรแกรม

คลา สไบค์{

ถือเป็นโมฆะ run(){System.out.println("running");}

}

คลาส Splendor ขยาย จักรยาน{

โมฆะ run(){System.out.println("เดินอย่างปลอดภัยด้วยระยะทาง 30 กม.");}

สาธารณะ คงที่ เป็นโมฆะ main(String args[]){

จักรยาน b = ใหม่ Splendor();//upcasting

b.run();

}

}

เอาท์พุต: เดินอย่างปลอดภัยด้วยระยะทาง 60km

ตัวอย่าง 2

สองคลาสที่มีชื่อ "ABC" และ "XYZ" ถูกสร้างขึ้นโดยที่ XYZ เป็นคลาสย่อยและ ABC เป็นคลาสพาเรนต์ ที่นี่ เมธอด myMethod() ของคลาสพาเรนต์ถูกแทนที่โดยคลาสย่อย ออบเจ็กต์คลาสลูกถูกกำหนดให้กับการอ้างอิงคลาสพาเรนต์

โปรแกรม:

คลาสเอบีซี{

โมฆะสาธารณะ myMethod(){

System.out.println(“วิธีการแทนที่”);

}

}

คลาสสาธารณะ XYZ ขยาย ABC{

โมฆะสาธารณะ myMethod(){

System.out.println("วิธีการเอาชนะ");

}

โมฆะคงที่สาธารณะหลัก (สตริง args[]){

ABC obj = XYZ ใหม่ ();

obj.myMethod();

}

}

เอาท์พุต

วิธีการเอาชนะ

บทสรุป

แนวคิดของ พหุสัณฐานในจาวา เป็นหนึ่งในคุณสมบัติที่มีประโยชน์มากที่สุดในการเขียนโปรแกรมเชิงวัตถุ นอกจากนี้ ความสามารถในการเรียกใช้เมธอดทั้งที่สแตติกและรันไทม์ทำให้การบังคับใช้กว้างขึ้น

แนวคิดเบื้องหลังการนำแนวคิดเรื่องความหลากหลายมาใช้คือความยืดหยุ่น ความสามารถเพิ่มเติมในการประมวลผลอ็อบเจ็กต์จำนวนมากในตัวแปรอ้างอิงเดียว ทำให้การเข้ารหัสง่ายขึ้นอีกเล็กน้อย ดังนั้น แนวคิดนี้จึงควรใช้ในงานเขียนโค้ดประจำวันและนำเอาประสิทธิภาพมาใช้

หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเทคโนโลยีซอฟต์แวร์ การพัฒนา และกลไกเบื้องหลัง คุณสามารถตรวจสอบหลักสูตร Executive PG Program in Software Development – ​​Specialization in Full Stack Development ที่นำเสนอโดย upGrad หลักสูตรเฉพาะทางเป็นโปรแกรมออนไลน์ 23 สัปดาห์ซึ่งมีกรณีศึกษามากกว่า 300 รายการเพื่อเพิ่มพูนความรู้และเครื่องมือที่มีอยู่และภาษาการเขียนโปรแกรมเพื่อพัฒนาทักษะการปฏิบัติของคุณ หากคุณมีคำถามเพิ่มเติมเกี่ยวกับหลักสูตร ส่งข้อความหาเรา ทีมงานของเราจะติดต่อกลับหาคุณ

วางแผนอาชีพการพัฒนาซอฟต์แวร์ของคุณตอนนี้

สมัคร Executive PG Program ด้าน Software Development จาก IIIT-B