ประเภทของความหลากหลายใน Java [ความหลากหลายแบบคงที่และแบบไดนามิกพร้อมตัวอย่าง]
เผยแพร่แล้ว: 2021-06-18สารบัญ
Polymorphism ใน Java คืออะไร?
แนวคิดที่สำคัญอย่างหนึ่งใน Object Oriented Programming (OOP) คือ พหุสัณฐาน ซึ่งหมายความว่าการดำเนินการเดียวสามารถทำได้ในรูปแบบต่างๆ มาจากคำภาษากรีก: poly และ morphs หมายถึงหลายรูปแบบ มีรูปแบบที่แตกต่างกันเมื่อมีความเกี่ยวข้องกันโดยการสืบทอด
เช่นเดียวกับการสืบทอดที่สืบทอดเมธอดและคุณลักษณะจากคลาสอื่น ความหลากหลายใช้เมธอดเหล่านั้นและทำงานต่างกัน วัตถุสามารถหล่อหลอมตัวเองให้อยู่ในรูปแบบต่างๆ ผ่านความหลากหลายทางสัณฐานวิทยา
กล่าวคือ เอนทิตีสามารถดำเนินการต่างๆ ในสถานการณ์ต่างๆ ได้ การใช้งาน polymorphism ทั่วไปอย่างหนึ่งใน Object Oriented Programming คือเมื่อมีการใช้การอ้างอิงคลาสพาเรนต์เพื่ออ้างถึงอ็อบเจ็กต์คลาสย่อย อ่านเพิ่มเติมเกี่ยวกับแนวคิดและตัวอย่าง OOP ต่างๆ
Polymorphism ใน Java สามารถทำได้สามวิธี:
การ แทนที่เมธอด: หากซูเปอร์คลาสและคลาสย่อยประกอบด้วยเมธอดเดียวกัน การแทนที่เมธอดหมายถึงกระบวนการแทนที่เมธอดในซูเปอร์คลาสด้วยเมธอดในคลาสย่อย ด้วยเหตุนี้ วิธีการเดียวกันนี้จึงถูกใช้ในสภาวะต่างๆ
ผลลัพธ์ของโปรแกรม:
ภาษาการเขียนโปรแกรม Java
ภาษาอังกฤษทั่วไป
- วิธีการโอเวอร์โหลด: วิธีการโอเวอร์โหลดหมายถึงกระบวนการสร้างเมธอดที่มีชื่อเดียวกัน แต่มีพารามิเตอร์ต่างกัน ตัวอย่าง ได้แก่ void func() { … } void func(int a) { … } float func(double a) { … } float func(int a float b) { … }
เอาท์พุต
**********
##########
- โอเปอเรเตอร์โอเวอร์โหลด: โอเปอเรเตอร์โอเวอร์โหลดเป็นแนวคิดใน 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 รายการเพื่อเพิ่มพูนความรู้และเครื่องมือที่มีอยู่และภาษาการเขียนโปรแกรมเพื่อพัฒนาทักษะการปฏิบัติของคุณ หากคุณมีคำถามเพิ่มเติมเกี่ยวกับหลักสูตร ส่งข้อความหาเรา ทีมงานของเราจะติดต่อกลับหาคุณ