ความหลากหลายของจาวา
polymorphism มีสองประเภท:
(1) การรวบรวม polymorphism (polymorphism การออกแบบเวลา): วิธีการโอเวอร์โหลด
(2) รันไทม์ polymorphism: ระบบรันไทม์ Java ตัดสินใจว่าวิธีการเรียกใช้ตามประเภทของอินสแตนซ์ที่เรียกใช้วิธีการซึ่งเรียกว่า polymorphism รันไทม์ (สิ่งที่เรามักจะพูดถึงคือความหลากหลายของรันไทม์ดังนั้น polymorphism ส่วนใหญ่หมายถึง polymorphism รันไทม์)
เงื่อนไขที่จำเป็นสามประการสำหรับการดำรงอยู่ของ polymorphism ในรันไทม์:
1. จะต้องมีมรดก (รวมถึงการใช้งานอินเตอร์เฟส);
2. จะต้องมีการเขียนใหม่
3. การอ้างอิงคลาสหลักชี้ไปที่วัตถุคลาสเด็ก
ประโยชน์ของ polymorphism:
1. การทดแทน ความหลากหลายสามารถใช้แทนกันได้สำหรับรหัสที่มีอยู่ ตัวอย่างเช่น polymorphism ทำงานบนระดับวงกลมวงกลมและยังทำงานกับเรขาคณิตวงกลมอื่น ๆ เช่นวงกลม
2. ความสามารถในการขยาย Polymorphism สามารถปรับขนาดได้เป็นรหัส การเพิ่มคลาสย่อยใหม่ไม่ส่งผลกระทบต่อการทำงานและการทำงานของความหลากหลายของคลาสที่มีอยู่การสืบทอดและลักษณะอื่น ๆ ในความเป็นจริงมันง่ายกว่าที่จะได้รับฟังก์ชั่น polymorphic โดยการเพิ่มคลาสย่อยใหม่ ตัวอย่างเช่นบนพื้นฐานของการตระหนักถึงความหลากหลายของกรวยเซมิโคนและซีกโลกมันเป็นเรื่องง่ายที่จะเพิ่มความหลากหลายของทรงกลม
3. ความสามารถในการเชื่อมต่อ Polymorphism ทำได้โดย superclasses ผ่านลายเซ็นวิธีการให้อินเทอร์เฟซทั่วไปกับคลาสย่อยและคลาสย่อยจะถูกนำไปใช้โดย subclasses เพื่อปรับปรุงหรือเขียนทับ ดังแสดงในรูปที่ 8.3 ในรูปรูปร่างสุดยอดจะระบุวิธีการอินเทอร์เฟซสองวิธีที่ใช้ polymorphism, computearea () และ computeVolume () คลาสย่อยเช่นวงกลมและทรงกลมปรับปรุงหรือแทนที่วิธีการอินเทอร์เฟซทั้งสองนี้เพื่อให้บรรลุความหลากหลาย
4. ความยืดหยุ่น มันสะท้อนให้เห็นถึงการดำเนินงานที่ยืดหยุ่นและหลากหลายในแอปพลิเคชันและปรับปรุงประสิทธิภาพการใช้งาน
5. ความเรียบง่าย Polymorphism ช่วยลดความซับซ้อนของกระบวนการเขียนรหัสและการปรับเปลี่ยนของซอฟต์แวร์แอปพลิเคชันโดยเฉพาะอย่างยิ่งเมื่อต้องรับมือกับการดำเนินงานและการดำเนินงานของวัตถุจำนวนมากคุณลักษณะนี้มีความโดดเด่นและสำคัญเป็นพิเศษ
หมายเหตุ: ลำดับความสำคัญคือจากสูงถึงต่ำ: this.show (o), super.show (o), this.show ((super) o), super.show ((super) o)
คำถามสัมภาษณ์ที่เกี่ยวข้อง:
คลาส A {Public String Show (D obj) .. {return ("A และ D"); } public String Show (a obj) .. {return ("a และ a"); }} คลาส B ขยาย {public string show (b obj) .. {return ("b และ b"); } String Public String (A OBJ) .. {return ("B และ A"); }} คลาส C ขยาย B ... {} คลาส D ขยาย B ... {}(2) คำถาม: ผลลัพธ์ผลลัพธ์ต่อไปนี้คืออะไร?
A1 = ใหม่ a ();
a2 = ใหม่ b ();
b b = ใหม่ b ();
c c = ใหม่ c ();
d d = new d ();
System.out.println (a1.show (b)); ①
System.out.println (a1.show (c)); ②
System.out.println (a1.show (d)); ③
System.out.println (a2.show (b)); ④
System.out.println (a2.show (c)); ⑤
System.out.println (a2.show (d)); ⑥
System.out.println (b.show (b)); ⑦
System.out.println (b.show (c)); ⑧
System.out.println (b.show (d)); ⑨
(iii) คำตอบ
① A และ A
② A และ A
③ A และ D
④ B และ A
⑤ B และ A
⑥ A และ D
⑦ B และ B
⑧ B และ B
⑨ A และ D
วิเคราะห์:
เมื่อทำคำถามประเภทนี้คุณต้องใช้ลำดับความสำคัญเสมอ:
สำหรับคำถามหนึ่ง:
A1 เป็นวัตถุอินสแตนซ์ของคลาส A ดังนั้นชี้ไปที่ A แล้วมองหาสิ่งนี้ show (b) เนื่องจากไม่มีวิธีการจึงไปที่ Super.Show (B) อย่างไรก็ตามเนื่องจาก Class A ไม่มี superclass มันไปที่นี่ show (super b) เนื่องจาก Superclass ของ B เป็น A จึงเทียบเท่ากับสิ่งนี้ show (a) จากนั้นวิธีนี้จะพบในคลาส A ดังนั้น A และ A คือเอาต์พุต
สำหรับคำถามที่ 2:
ในทำนองเดียวกัน A1 เป็นวัตถุอินสแตนซ์ของคลาส A ดังนั้นสิ่งนี้ชี้ไปที่ A และจากนั้นค้นหาวิธีนี้. show (c) ในชั้นเรียน A เนื่องจากไม่มีวิธีการดังกล่าวฉันไปที่ super.show (c) เนื่องจากฉันมองหาสิ่งนี้ใน superclass ของ Class A แต่ A ไม่มี superclass ดังนั้นฉันจึงไปที่สิ่งนี้ show (super c) เนื่องจาก Superclass ของ C คือ B ฉันมองหาวิธีนี้ show (b) วิธีใน Class A และฉันไม่พบมัน จากนั้น B ก็มีซูเปอร์คลาสซึ่งเป็นดังนั้นฉันจึงมองหาสิ่งนี้ show (a) และฉันพบมันดังนั้นฉันจึงส่งออกและ a;
สำหรับคำถามที่ 3:
ในทำนองเดียวกัน A1 เป็นวัตถุอินสแตนซ์ของคลาส A ดังนั้นชี้ไปที่ A และจากนั้นค้นหาวิธีนี้ show (d) ในคลาส A และพบดังนั้น A และ D คือเอาต์พุต;
สำหรับคำถามที่ 4:
A2 เป็นวัตถุอ้างอิงของคลาส B ที่มีประเภท A ดังนั้นจุดนี้ไปยังคลาส A และจากนั้นค้นหาวิธีนี้ show (b) ในคลาส A แต่ไม่พบดังนั้นจึงมาถึง super.show (b) เนื่องจาก Class A ไม่มี superclass จึงมาถึงสิ่งนี้ show (super b) superclass ของ B คือ A นั่นคือ Super B = A ดังนั้นจึงดำเนินการวิธีนี้ แสดง (a), มองหา show (a) ในวิธี A และค้นหา แต่เนื่องจาก A2 เป็นวัตถุอ้างอิงของคลาส B และคลาส B ครอบคลุมวิธีการแสดง (A) ของคลาส A การดำเนินการขั้นสุดท้ายของวิธีการแสดง (A) ในคลาส B นั่นคือเอาท์พุท B และ A;
สำหรับคำถามที่ 5:
A2 เป็นวัตถุอ้างอิงของคลาส B ที่มีประเภท A ดังนั้นจุดนี้ไปยังคลาส A และจากนั้นมองหาวิธีนี้ show (c) ในคลาส A แต่ไม่พบดังนั้นมันจึงเป็นวิธี super.show (c) เนื่องจาก Class A ไม่มี superclass จึงเป็น B ดังนั้นจึงเป็น B ดังนั้นจึงพบได้ใน Class A แต่ไม่พบ B ยังมี superclass นั่นคือ A ดังนั้นจึงยังคงมองหาวิธีการแสดง (A) ในคลาส A และพบ แต่เนื่องจาก A2 เป็นวัตถุอ้างอิงของคลาส B และคลาส B ครอบคลุมวิธีการแสดง (A) ของคลาส A ดังนั้นในที่สุดมันก็ถูกดำเนินการ วิธีการแสดง (a) ในคลาส B นั่นคือผลลัพธ์ของ B และ A;
สำหรับคำถามที่ 6:
A2 เป็นวัตถุอ้างอิงของคลาส B ที่มี Type A ดังนั้นชี้ไปที่คลาส A แล้วค้นหาวิธีนี้ show (d) ในคลาส A และพบมัน อย่างไรก็ตามเนื่องจาก A2 เป็นวัตถุอ้างอิงของคลาส B จึงพบได้ในคลาส B ดังนั้นจึงพบว่ามีวิธีการแสดงมากกว่าการแสดง (d) ในคลาส B ดังนั้นจึงถูกดำเนินการ ดังนั้นวิธีการแสดง (d) ในคลาส A นั่นคือเอาต์พุต A และ D;
สำหรับคำถามที่เจ็ด:
B เป็นวัตถุอินสแตนซ์ของ Class B นายกรัฐมนตรีดำเนินการสิ่งนี้ show (b) มองหาวิธีการแสดง (b) ในคลาส B ค้นหามันและส่งออกโดยตรง B และ B;
สำหรับคำถามที่ 8:
B เป็นวัตถุอินสแตนซ์ของ Class B นายกรัฐมนตรีดำเนินการสิ่งนี้ show (c) และมองหาวิธีการแสดง (c) ในคลาส B แต่ไม่พบดังนั้นเมื่อฉันไปที่ super.show (c) superclass ของ b คือดังนั้นเมื่อฉันมองหาวิธีการแสดง (c) วิธีการในคลาส B ฉันพบดังนั้นเมื่อฉันดำเนินการวิธีการแสดง (b) ในคลาส B, i output b และ b;
สำหรับคำถามที่ 9:
B เป็นวัตถุอินสแตนซ์ของ Class B นายกรัฐมนตรีดำเนินการสิ่งนี้ Show (D) มองหาวิธีการแสดง (D) ในคลาส B แต่ไม่พบดังนั้นฉันจึงไปที่ Super.Show (D) และ Superclass ของ B คือ Class A ดังนั้นฉันจึงมองหาวิธีการแสดง (D) ในชั้นเรียน A
นี่คือวิธีที่ฉันได้สรุปหลังจากอ่านคำถามบนอินเทอร์เน็ต ฉันหวังว่ามันจะเป็นประโยชน์ต่อทุกคน
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!