เราทุกคนรู้ดีว่า "สัตว์เลี้ยงลูกด้วยนมมีเสียงหลายประเภท" เช่น "คำราม" "เสียงหอน" "วูฟ" "เหมียว" ฯลฯ สิ่งเหล่านี้คือ ความหลากหลาย ของเสียง
ดังนั้นเมื่อคลาสมีคลาสย่อยจำนวนมาก และคลาสย่อยเหล่านี้แทนที่เมธอดในคลาสพาเรนต์ เมื่อเราใส่การอ้างอิงของอ็อบเจ็กต์ที่สร้างโดยคลาสย่อยลงในอ็อบเจ็กต์ของคลาสพาเรนต์ เราก็จะได้อ็อบเจ็กต์ An upcast ของอ็อบเจ็กต์ ในขณะนี้ วัตถุ upcast อาจมีความหลากหลายเมื่อเรียกเมธอดนี้ เนื่องจากคลาสย่อยที่แตกต่างกันอาจสร้างลักษณะการทำงานที่แตกต่างกันเมื่อแทนที่เมธอดของคลาสพาเรนต์
ตัวอย่างเช่น เมื่ออ็อบเจ็กต์ที่แปลงร่างแล้วของคลาส dog เรียกเมธอด "bark" พฤติกรรมที่สร้างขึ้นจะเป็น "woof" ในขณะที่เมื่ออ็อบเจ็กต์ที่แปลงร่างแล้วของคลาส cat เรียกเมธอด "bark" พฤติกรรมที่สร้างขึ้นจะเป็น "เหมียว" และอื่นๆ
ความหลากหลาย หมายความว่าเมื่อเมธอดของคลาสพาเรนต์ถูกแทนที่โดยคลาสย่อย แต่ละคลาสจะสามารถสร้างพฤติกรรมการทำงานของตัวเองได้
ตัวอย่างเช่น:
สัตว์คลาส {voidcry(){}} สุนัขคลาสขยายสัตว์ {voidcry(){System.out.println(wangwang);}} คลาสแมวขยายสัตว์ {voidcry(){System.out.println(miaomiao);}} publicclassMain {publicstaticvoidmain(Stringargs[]){animal;animal=new dog();animal.cry();animal=new cat();animal.cry();}}
ผลการวิ่งมีดังนี้:
หวังวังเมี่ยวเมี่ยว