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