Polymorphism คือความสามารถของวัตถุในหลายรูปแบบ การใช้พหุสัณฐานที่พบบ่อยที่สุดใน OOP เกิดขึ้นเมื่อการอ้างอิงคลาสพาเรนต์ใช้เพื่ออ้างถึงอ็อบเจ็กต์คลาสย่อย
ออบเจ็กต์ Java ใดๆ ที่สามารถผ่านการทดสอบ IS-A ได้มากกว่าหนึ่งรายการจะถือว่าเป็นแบบพหุมอร์ฟิค ใน Java ออบเจ็กต์ Java ทั้งหมดเป็นแบบโพลีมอร์ฟิค เนื่องจากอ็อบเจ็กต์ใดๆ จะผ่านการทดสอบ IS-A สำหรับประเภทของตัวเองและสำหรับ Object ของคลาส
สิ่งสำคัญคือต้องรู้ว่าวิธีเดียวที่เป็นไปได้ในการเข้าถึงวัตถุคือผ่านตัวแปรอ้างอิง ตัวแปรอ้างอิงสามารถมีได้เพียงประเภทเดียวเท่านั้น เมื่อประกาศแล้ว ชนิดของตัวแปรอ้างอิงจะไม่สามารถเปลี่ยนแปลงได้
ตัวแปรอ้างอิงสามารถกำหนดใหม่ให้กับอ็อบเจ็กต์อื่นได้หากไม่ได้ประกาศเป็นขั้นสุดท้าย ประเภทของตัวแปรอ้างอิงจะเป็นตัวกำหนดวิธีการที่มันสามารถเรียกใช้บนวัตถุได้
ตัวแปรอ้างอิงสามารถอ้างถึงวัตถุใด ๆ ของประเภทที่ประกาศหรือประเภทย่อยของประเภทที่ประกาศ ตัวแปรอ้างอิงสามารถประกาศเป็นคลาสหรือประเภทอินเตอร์เฟสได้
ตัวอย่าง
เรามาดูตัวอย่างกัน
public interface Vegetarian{} public class Animal{} public class Deer extends Animal implements Vegetarian{}
ในตอนนี้ คลาส Deer ถือเป็นพหุสัณฐานเนื่องจากมีการสืบทอดหลายแบบ ต่อไปนี้เป็นความจริงสำหรับตัวอย่างข้างต้น -
- กวางคือสัตว์
- กวางคือมังสวิรัติ
- กวางก็คือกวาง
- กวางคือวัตถุ
เมื่อเราใช้ข้อมูลตัวแปรอ้างอิงกับการอ้างอิงอ็อบเจกต์ Deer การประกาศต่อไปนี้ถือเป็นกฎหมาย -
ตัวอย่าง
Deer d = new Deer(); Animal a = d; Vegetarian v = d; Object o = d;
ตัวแปรอ้างอิงทั้งหมด d, a, v, o อ้างถึงอ็อบเจกต์ Deer เดียวกันในฮีป