นักเรียนหลายคนโง่และไม่สามารถบอกความแตกต่างระหว่างการโอเวอร์โหลดและแทนที่ ขอแนะนำไม่ให้จดจำความรู้เชิงแนวคิดโดยการท่องจำ แต่เพื่อทำความเข้าใจและจดจำ
ก่อนอื่นให้ฉันให้คำจำกัดความของฉัน:
โอเวอร์โหลด: ในคลาสเดียวกันหรือในความสัมพันธ์การสืบทอดกลุ่มวิธีการที่มีชื่อเดียวกันและพารามิเตอร์ที่แตกต่างกัน โดยพื้นฐานแล้วมันเป็นชื่อของวิธีการที่แตกต่างกัน
Override: ระหว่างสองคลาสที่มีความสัมพันธ์ในการสืบทอดวิธีการที่มีอยู่ในคลาสหลักจะถูกกำหนดใหม่ในคลาสย่อย สาระสำคัญคือการให้การใช้งานที่แตกต่างกันสำหรับวิธีเดียวกัน
ก่อนอื่นให้ดูตัวอย่างของการโอเวอร์โหลด:
คลาสสาธารณะ OverloadParent {Public String getPerson (ชื่อสตริง) {return "persona" + ชื่อ; } สตริงสาธารณะ getPerson (อายุ int) {return "personb"; } สตริงสาธารณะ getPerson (ชื่อสตริงอายุ int) {return "personc"; } โมฆะสาธารณะ getPerson (ชื่อสตริง) {system.out.println ("ฉันเป็นวิธีที่โอเวอร์โหลดหรือไม่"); - คลาสสาธารณะ OverloadChildExtends overloadParent {โมฆะสาธารณะ getPerson (เงินสองเท่า) {System.out.println ("ฉันเป็นวิธีการโอเวอร์โหลด"); -ให้ความสนใจกับการสังเกต:
(1) มี 4 วิธีที่มีชื่อเดียวกันใน overloadparent
(2) ประเภทพารามิเตอร์และจำนวนของสามวิธีแรกไม่สอดคล้องกันและค่าคืนค่าเหมือนกันซึ่งถือว่าโอเวอร์โหลด
(3) วิธีการที่ 4 และวิธีการที่ 1 เฉพาะค่าที่ส่งคืนจะแตกต่างกันและไม่ถือว่าเป็นการโอเวอร์โหลดและคอมไพเลอร์ไม่ผ่าน
PS: ค่าส่งคืนเป็นผลมาจากการดำเนินการวิธีการ เมื่อเราเรียกวิธีการเราจะไม่ระบุ "ฉันต้องการเรียกวิธีการที่มีค่าส่งคืนของประเภท xxx" มันจะไม่กลายเป็นคุณลักษณะของวิธีการโอเวอร์โหลด
(4) overloadparent สืบทอดการสาธิตและมีวิธีการทั้งหมดที่เป็นเจ้าของในการสาธิต มันรู้สึกว่าวิธีที่มีอยู่ไม่สามารถตอบสนองความต้องการได้ดังนั้นมันจึงมากเกินไป
ธงมากเกินไป: ชื่อวิธีการเหมือนกันพารามิเตอร์แตกต่างกัน (หมายเลขหรือประเภท) และไม่มีส่วนเกี่ยวข้องกับค่าส่งคืน
มาดูตัวอย่างการเขียนทับกัน:
คลาสสาธารณะ overrideparent {public void fly () {system.out.println ("ican fly!"); - คลาสสาธารณะที่ overridechild ขยาย overrideparent {@Override โมฆะสาธารณะ Fly () {System.out.println ("Ican't Fly แต่ฉันสามารถวิ่งได้!"); - สาธารณะคงที่ vid main (string [] args) {overwriteparent child = new wudritechild (); เด็กแมลงวัน (); -อะไรจะเป็นผลผลิตเมื่อดำเนินการหลักวิธีหลักของ Overridechild?
คำตอบคือฉันไม่สามารถแมลงลูดได้ แต่ฉันสามารถวิ่งได้!
เราเห็น:
(1) ผู้ครอบงำและ overrideparent มีวิธีการบิน
(2) ค่าส่งคืนและตัวดัดแปลงของแมลงวันเหมือนกันเฉพาะร่างกายของวิธีการแตกต่างกัน
(3) มีคำอธิบายประกอบของ @Overwrite ก่อนวิธีการบินของคลาสย่อย JDK1.5 ปรากฏขึ้นและใช้สำหรับการสืบทอดคลาสเท่านั้น 1.6 สามารถใช้สำหรับการใช้งานส่วนต่อประสาน คำอธิบายประกอบนี้ช่วยตรวจสอบคอมไพเลอร์และไม่สามารถเพิ่มได้
Flags Overridden: เด็กสืบทอดคลาสหลักและมีการใช้งานที่แตกต่างกันสำหรับวิธีการเดียวกัน
สถานการณ์แอปพลิเคชัน
โอเวอร์โหลด: เมื่อฟังก์ชั่นวิธีการคล้ายกัน แต่ต้องส่งพารามิเตอร์ที่แตกต่างกัน
Override: เมื่อ subclass มีพฤติกรรมที่เป็นเอกลักษณ์ของตัวเองมันสืบทอดมาจากชั้นเรียนหลักและไม่สามารถตอบสนองความต้องการของตัวเองได้
PS: การโอเวอร์โหลดและการเขียนทับเป็นทั้งการแสดงออกของความหลากหลาย อดีตคือคอมไพเลอร์ polymorphism ในขณะที่หลังเป็นรันไทม์ polymorphism
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!