กลไกการเชื่อมโยงแบบไดนามิกช่วยให้การอ้างอิงไปยังคลาสฐานเพื่อชี้ไปที่วัตถุ subclass ที่ถูกต้องดังนั้นจึงเปิดใช้งานการเขียนโปรแกรมที่เน้นคลาสพื้นฐาน
อย่างไรก็ตามการผูกมัดแบบไดนามิกจะล้มเหลวในสองสถานการณ์ต่อไปนี้
1. วิธีการคลาสพื้นฐานเป็นแบบส่วนตัวหรือการแก้ไขขั้นสุดท้าย
นี่เป็นเรื่องง่ายที่จะเข้าใจเพราะส่วนตัวหมายความว่าวิธีนี้มองไม่เห็นคลาสย่อย การเขียนวิธีการที่มีชื่อเดียวกันในคลาสย่อยไม่ได้แทนที่วิธีการคลาสแม่ แต่เพื่อสร้างวิธีใหม่ใหม่ดังนั้นจึงไม่มีปัญหาของ polymorphism สิ่งเดียวกันนี้สามารถอธิบายได้โดยรอบชิงชนะเลิศเพราะวิธีนี้ยังไม่มีใครเทียบได้
2. วิธีการแก้ไขแบบคงที่
รหัสมีดังนี้
ฐานคลาส {โมฆะสาธารณะคงที่ staticMethod () {system.out.println ("ฐาน staticmehtod"); } โมฆะสาธารณะ DynamicMehTod () {System.out.println ("ฐาน DynamicMehTod"); }} คลาสย่อยระดับขยายฐาน {โมฆะสาธารณะคงที่ StaticMethod () {System.out.println ("Sub StaticMehTod"); } โมฆะสาธารณะ DynamicMehTod () {System.out.println ("Sub DynamicMehTod"); }} คลาสสาธารณะ tj4 {โมฆะคงที่สาธารณะหลัก (สตริง args []) {base c = ใหม่ย่อย (); C. StaticMethod (); C.DynamicMehtod (); }}/ * เอาท์พุท: ฐาน STATICMEHTOD SUB DYNAMICMEHTOD *//ผลลัพธ์ผลลัพธ์ไม่ได้ส่งออก "Sub StaticMehTod" ตามที่คาดไว้ เนื่องจากวิธีการคงที่เกี่ยวข้องกับคลาสแทนที่จะเป็นวัตถุ c.staticmethod (); เทียบเท่ากับ car.staticmethod (); ดังนั้นพยายามอย่าใช้ตัวแปรอินสแตนซ์เพื่อเรียกวิธีการคงที่เพื่อหลีกเลี่ยงความสับสน
คำอธิบายโดยละเอียดข้างต้นของวิธี Java Static ไม่ใช่ polymorphic นี่คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น