วิธีการโอเวอร์โหลด

หัวข้อใหม่และน่าสนใจของเราในวันนี้คือวิธีการโอเวอร์โหลด ระวัง — การโอเวอร์โหลดเมธอดต้องไม่สับสนกับการโอเวอร์ไรด์เมธอด

การโอเวอร์โหลดเป็นการดำเนินการที่ง่ายมาก จริงๆ แล้วมันไม่ใช่การดำเนินการกับเมธอด แม้ว่าบางครั้งมันถูกอ้างถึงด้วยคำว่าparametric polymorphism ที่น่ากลัว

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

ตัวอย่าง:

รหัส คำอธิบาย
public void print();
public void print2();
สิ่งนี้ได้รับอนุญาต ทั้งสองวิธีมีชื่อเฉพาะ
public void print();
public void print(int n);
และสิ่งนี้ด้วย ทั้งสองวิธีมีชื่อเฉพาะ (ลายเซ็น)
public void print(int n, int n2);
public void print(int n);
วิธีการยังคงเป็นเอกลักษณ์
public int print(int a);
public void print(int n);
แต่สิ่งนี้ไม่อนุญาต วิธีการจะไม่ซ้ำกัน แม้จะคืนคนละแบบ.
public int print(int a, long b);
public long print(long b, int a);
แต่คุณสามารถทำได้ พารามิเตอร์เมธอดไม่ซ้ำกัน

ลายเซ็นประกอบด้วยชื่อเมธอดและประเภทพารามิเตอร์ โดยจะไม่รวม ประเภทการส่ง คืนของเมธอดและชื่อพารามิเตอร์ คลาสไม่สามารถมี 2 เมธอดที่มีลายเซ็นเดียวกันได้ — คอมไพเลอร์ไม่รู้ว่าควรเรียกเมธอดใด

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

ตาม หลักการของ OOPความหลากหลายจะซ่อนการใช้งานที่แตกต่างกันไว้เบื้องหลังอินเทอร์เฟซเดียว เมื่อเราเรียกSystem.out.println()เมธอด ตัวอย่างเช่น เมธอดต่างๆ จะถูกเรียกขึ้นอยู่กับอาร์กิวเมนต์ที่ส่งผ่าน นี่คือความหลากหลายในการดำเนินการ

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