การแทนที่เมธอดและการโอเวอร์โหลดเป็นการแสดงออกที่แตกต่างกันของ Java polymorphism การเอาชนะคือการรวมตัวกันของความหลากหลายระหว่างพาเรนต์และคลาสย่อย ในขณะที่การโอเวอร์โหลดเป็นการรวมตัวกันของความหลากหลายในคลาส
ถ้าเมธอดที่กำหนดในคลาสย่อยมีชื่อและพารามิเตอร์เหมือนกับคลาสพาเรนต์ เราจะบอกว่าเมธอดนั้นถูกแทนที่ เมื่ออ็อบเจ็กต์ของคลาสย่อยใช้เมธอดนี้ มันจะเรียกคำจำกัดความในคลาสย่อย ด้วยเหตุนี้ คำจำกัดความในคลาสพาเรนต์จึงดูเหมือนว่าจะถูก "ป้องกัน"
หากมีการกำหนดวิธีการที่มีชื่อเดียวกันหลายวิธีในคลาสหนึ่ง และอาจมีจำนวนพารามิเตอร์ต่างกัน ประเภทพารามิเตอร์ต่างกัน หรือลำดับพารามิเตอร์ต่างกัน จะเรียกว่าการโอเวอร์โหลดเมธอด ไม่สามารถโอเวอร์โหลดได้ด้วยการอนุญาตการเข้าถึง ประเภทการส่งคืน หรือข้อยกเว้นที่ส่งออกมา
1. วิธีการโอเวอร์โหลด (overload)
แนวคิด: พูดง่ายๆ ก็คือ การโอเวอร์โหลดเมธอดเป็นวิธีการใช้งานหลายวิธีที่มีฟังก์ชันเดียวกันของคลาส
สิ่งที่ควรทราบ:
(1) ชื่อวิธีการเหมือนกัน (2) ประเภทพารามิเตอร์ หมายเลข และลำดับของวิธีการไม่แตกต่างกันอย่างน้อยหนึ่งวิธี (3) ประเภทการส่งคืนของวิธีการอาจแตกต่างกัน (4) ตัวแก้ไขของ วิธีการอาจแตกต่างกันได้ หากเฉพาะประเภทการส่งคืนที่แตกต่างกัน จะไม่ถือเป็นการโอเวอร์โหลด
วิธีการโอเวอร์โหลดสามารถเปลี่ยนประเภทของค่าส่งคืนได้
2. การแทนที่วิธีการ (แทนที่)
แนวคิด: พูดง่ายๆ ก็คือ การครอบคลุมเมธอดหมายความว่าคลาสย่อยมีเมธอดที่มีชื่อ ประเภทการส่งคืน และพารามิเตอร์เหมือนกับเมธอดของคลาสพาเรนต์ จากนั้นเราจะบอกว่าเมธอดของคลาสย่อยจะแทนที่เมธอดของพาเรนต์ ระดับ.
หมายเหตุ: มีเงื่อนไขหลายประการสำหรับการครอบคลุมวิธีการ โดยทั่วไป มีสองประเด็นที่คุณต้องใส่ใจ:
(1) ประเภทการส่งคืน พารามิเตอร์ และชื่อเมธอดของเมธอดคลาสย่อยจะต้องเหมือนกันทุกประการกับประเภทการส่งคืน พารามิเตอร์ และชื่อเมธอดของเมธอดคลาสพาเรนต์ มิฉะนั้นจะเกิดข้อผิดพลาดในการคอมไพล์
(2) วิธีคลาสย่อยไม่สามารถลดสิทธิ์การเข้าถึงของวิธีคลาสพาเรนต์ได้ (สามารถย้อนกลับได้)
ตัวอย่าง:
แทนที่อินสแตนซ์