Method overloading หรือที่เรียกว่า Function overloading หรือ Compile time polymorphism เป็นแนวคิดของการมีสองวิธีขึ้นไปที่มีชื่อเดียวกัน แต่มีลายเซ็นที่แตกต่างกันในขอบเขตเดียวกัน มีภาษาการเขียนโปรแกรมมากมายที่สนับสนุนคุณสมบัตินี้: Ada, C ++, C #, D และ Java
ตัวอย่างของวิธีการมากไปใน C #
คลาส OverloadShapes {ลอยรูปหลายเหลี่ยม (รัศมี int, pi ลอย) {float circleArea = pi * รัศมี * รัศมี } int รูปหลายเหลี่ยม (ความยาว int ความกว้าง int) {int rectangleArea = ความยาว * ความกว้าง; } int รูปหลายเหลี่ยม (ด้าน int) {int squareArea = ด้าน * ด้าน; }}1 2 3 4 5 6 7 8 9 10 11 12 13 14 | คลาส OverloadShapes {ลอยรูปหลายเหลี่ยม (รัศมี int, pi ลอย) {float circleArea = pi * รัศมี * รัศมี } int รูปหลายเหลี่ยม (ความยาว int ความกว้าง int) {int rectangleArea = ความยาว * ความกว้าง; } int รูปหลายเหลี่ยม (ด้าน int) {int squareArea = ด้าน * ด้าน; }} |
ดังที่แสดงในตัวอย่างข้างต้นวิธีการ 'รูปหลายเหลี่ยม' ถูกโหลดมากเกินไป 3 ครั้งด้วยลายเซ็นของวิธีการที่แตกต่างกันเช่นชนิดหรือจำนวนพารามิเตอร์จะแตกต่างกัน
วิธีการเอาชนะ
การแทนที่เมธอดหรือที่รู้จักกันในชื่อ Function Overriding หรือ Run time polymorphism เป็นฟีเจอร์ OOP ที่ช่วยให้คลาสเด็ก ๆ สามารถให้การใช้งานของตนเองกับวิธีที่กำหนดไว้ในคลาสพาเรนต์ การนำไปใช้ในคลาสย่อยจะแทนที่นิยามของเมธอดในคลาสพื้นฐานโดยที่เมธอดในคลาสย่อยควรมีชื่อลายเซ็นและชนิดส่งคืนเดียวกัน
ตัวอย่างของวิธีการเอาชนะใน C #
คลาส Source1 {public void draw () {Console.Writeline ("ฉันอยู่ในคลาส Source1"); }} คลาส Source2 ขยาย Source1 {public void draw () {Console.Writeline ("ฉันอยู่ในคลาส Source2"); }}1 2 3 4 5 6 7 8 9 10 | คลาส Source1 {public void draw () {Console Writeline ("ฉันอยู่ในชั้นเรียน Source1"); }} คลาส Source2 ขยาย Source1 {public void draw () {Console Writeline ("ฉันอยู่ในคลาส Source2"); }} |
ในที่นี้วิธีการวาดในคลาส Source2 จะแทนที่วิธีการวาดที่กำหนดในคลาส Source1
ความแตกต่างระหว่างวิธีการมากไปและวิธีการเอาชนะ
- ในวิธีการมากเกินไปวิธีการต้องมีลายเซ็นที่แตกต่างกัน ในวิธีการวิธีการเอาชนะจะต้องมีลายเซ็นเดียวกัน
- ฟังก์ชันโอเวอร์โหลดคือ“ เพิ่ม” หรือ“ ขยาย” มากขึ้นตามพฤติกรรมของวิธีการ การแทนที่ฟังก์ชั่นคือ "เปลี่ยน" หรือ "กำหนด" ลักษณะการทำงานของวิธีการอย่างสมบูรณ์
- วิธีการบรรทุกเกินพิกัดจะใช้เพื่อให้เกิดความแตกต่างของเวลารวบรวม; การแทนที่เมธอดถูกใช้เพื่อให้เกิด polymorphism แบบรันไทม์
- ในวิธีการ / ฟังก์ชั่นการรวบรวมเกินพิกัดรู้ว่าวัตถุใดที่ได้รับมอบหมายให้เรียนในช่วงเวลาของการรวบรวม แต่ในวิธีการเอาชนะข้อมูลนี้ไม่เป็นที่รู้จักจนถึงรันไทม์
- Function Overloading เกิดขึ้นในคลาสเดียวกันในขณะที่ Overriding เกิดขึ้นในคลาสที่ได้มาจากคลาสพื้นฐาน