เอาชนะ vs โอเวอร์โหลด
วิธี Overriding และ method Overloading เป็นสองแนวคิด/เทคนิค/คุณลักษณะที่พบในภาษาโปรแกรมบางภาษา แนวคิดทั้งสองอนุญาตให้โปรแกรมเมอร์จัดเตรียมการใช้งานที่แตกต่างกันสำหรับเมธอดที่มีชื่อเดียวกัน การแทนที่เมธอดช่วยให้โปรแกรมเมอร์สามารถจัดเตรียมการใช้งานทางเลือกภายในคลาสย่อยให้กับเมธอดที่กำหนดไว้แล้วภายในซูเปอร์คลาส การโอเวอร์โหลดเมธอดทำให้โปรแกรมเมอร์สามารถจัดเตรียมการใช้งานที่แตกต่างกันให้กับเมธอดหลายเมธอดที่มีชื่อเดียวกัน (ภายในคลาสเดียวกัน)
การเอาชนะคืออะไร
ดังที่กล่าวไว้ข้างต้น คลาสสามารถขยายคลาสซูเปอร์หรือคลาสพาเรนต์ ในภาษาโปรแกรมเชิงวัตถุคลาสย่อยสามารถมีเมธอดของตัวเองหรือสามารถเลือกใช้งานเมธอดที่กำหนดไว้แล้วในคลาสพาเรนต์ (หรือคลาสพาเรนต์หลักอย่างใดอย่างหนึ่ง) ดังนั้นเมื่อสิ่งหลังเกิดขึ้นจึงเรียกว่าวิธีการเอาชนะ กล่าวอีกนัยหนึ่ง ถ้าคลาสลูกจัดให้มีการใช้งานเมธอดที่มีลายเซ็นและประเภทการส่งคืนเหมือนกันกับวิธีการที่กำหนดไว้แล้วในคลาสพาเรนต์ตัวใดตัวหนึ่ง วิธีการนั้นจะถูกแทนที่ (แทนที่) โดยการนำคลาสย่อยไปใช้. ดังนั้น หากมีเมธอดที่ถูกแทนที่ในคลาส ระบบรันไทม์จะต้องตัดสินใจว่าจะใช้เมธอดใดในการนำไปใช้ ปัญหานี้แก้ไขได้ด้วยการพิจารณาประเภทวัตถุที่ใช้ในการเรียกใช้ หากวัตถุของคลาสพาเรนต์ถูกใช้เพื่อเรียกใช้เมธอดที่ถูกแทนที่ การใช้งานในคลาสพาเรนต์จะถูกใช้ ในทำนองเดียวกัน หากเป็นวัตถุของคลาสลูกที่ใช้ ก็จะใช้การนำคลาสลูกไปใช้งาน ภาษาโปรแกรมสมัยใหม่ เช่น Java, Eifell, C++ และ Python ช่วยให้สามารถแทนที่วิธีการได้
โอเวอร์โหลดคืออะไร
วิธีการโอเวอร์โหลดเป็นคุณลักษณะที่มีให้โดยภาษาโปรแกรมบางภาษาเพื่อสร้างเมธอดมากกว่าหนึ่งวิธีโดยใช้ชื่อเดียวกัน แต่มีประเภทอินพุตและเอาต์พุตต่างกัน ในภาษาโปรแกรมสมัยใหม่ เช่น Java, C, C++ และ VB. NET ฟีเจอร์นี้จะพร้อมใช้งาน คุณสามารถโอเวอร์โหลดเมธอดได้โดยการสร้างเมธอดอื่นที่มีชื่อเดียวกันแต่ใช้ลายเซ็นเมธอดอื่นหรือประเภทส่งคืนอื่น (หรือทั้งสองอย่าง) ตัวอย่างเช่น หากคุณมี method1(type1 t1) และ method1(type2 t2) อยู่ในคลาสเดียวกัน ก็จะโอเวอร์โหลด จากนั้นระบบจะต้องตัดสินใจว่าจะดำเนินการใดเมื่อมีการเรียก ความแตกต่างนี้เกิดจากการดูประเภทของพารามิเตอร์ที่ส่งผ่านไปยังเมธอด หากอาร์กิวเมนต์เป็นประเภท 1 การนำไปใช้งานครั้งแรกจะถูกเรียก ในขณะที่หากเป็นประเภทที่ 2 การนำไปใช้งานครั้งที่สองจะถูกเรียก
การทับซ้อนและการโอเวอร์โหลดต่างกันอย่างไร
แม้ว่าการแทนที่เมธอดและการโอเวอร์โหลดเมธอดจะถูกใช้เพื่อจัดเตรียมเมธอดที่มีการนำไปใช้งานที่แตกต่างกัน แต่ก็มีความแตกต่างที่สำคัญระหว่างแนวคิด/เทคนิคทั้งสองนี้อย่างแรกเลย หัวข้อของการแทนที่เมธอดจะอยู่ในคลาสที่ต่างกันเสมอ ในขณะที่หัวเรื่องของเมธอดที่โอเวอร์โหลดจะอยู่ในคลาสเดียวกัน นั่นหมายความว่าสามารถแทนที่ได้เฉพาะในภาษาโปรแกรมเชิงวัตถุที่อนุญาตการสืบทอด ในขณะที่การโอเวอร์โหลดสามารถใช้ได้ในภาษาที่ไม่ใช่เชิงวัตถุเช่นกัน กล่าวอีกนัยหนึ่ง คุณแทนที่เมธอดในซูเปอร์คลาส แต่คุณโอเวอร์โหลดเมธอดภายในคลาสของคุณเอง
ความแตกต่างอีกประการหนึ่งคือเมธอดที่ถูกแทนที่มีชื่อเมธอด ลายเซ็นเมธอดและประเภทการส่งคืนเหมือนกัน แต่เมธอดโอเวอร์โหลดต้องต่างกันในลายเซ็นหรือประเภทส่งคืน (ชื่อควรเหมือนกัน) เพื่อแยกความแตกต่างระหว่างสองวิธีที่ถูกแทนที่ ประเภทของวัตถุที่แน่นอนที่ใช้ในการเรียกใช้วิธี id ที่ใช้ ในขณะที่เพื่อแยกความแตกต่างระหว่างสองวิธีที่โอเวอร์โหลด ประเภทของพารามิเตอร์จะถูกใช้ ความแตกต่างที่สำคัญอีกประการหนึ่งคือ การโอเวอร์โหลดได้รับการแก้ไขในเวลาคอมไพล์ ในขณะที่การแทนที่ได้รับการแก้ไขเมื่อรันไทม์