Last updated
Was this helpful?
Last updated
Was this helpful?
Polymorphism หมายถึง การมีหลายรูปแบบ หรือก็คือ ใน 1 กระบวนการหรือการกระทำสามารถแสดงผลลัพธ์หรือแสดงผลการกระทำได้มากกว่าหนึ่งรูปแบบ แบ่งออกเป็น 2 ประเภท
การใช้ชื่อฟังก์ชันเหมือนกัน แต่มีความสามารถหรือคุณลักษณะที่แตกต่างกัน หมายความว่า ฟังก์ชันสามารถเปลี่ยนจำนวการรับพารามิเตอร์หรือเปลี่ยนประเภทตัวแปรของพารามิเตอร์
จากตัวอย่างจะเห็นได้ว่าฟังก์ชันที่ชื่อ func ทำหน้าที่แตกต่างกันใน 3 สถานการณ์ (การรับพารามิเตอร์) ที่แตกต่างกัน ซึ่งเป็นคุณสมบัติของ Polymorphism
operator ที่ทำงานได้หลายแบบ ในหลักการเชิงวัตถุจะช่วยให้สามารถเรียกใช้เครื่องหมายเช่น +, -, *, / แทนการเรียกใช้เมดธอดหรือฟังก์ชันของ object
Inheritance คือ การสืบทอดความสามารถของ class ในการรับคุณสมบัติและลักษณะจาก class อื่น
ศัพย์ที่ควรรู้ ::
Sub Class คือ คลาสที่สืบทอดคุณสมบัติจากคลาสอื่น เรียกว่า คลาสที่ได้รับ (Derived Class)
Super Class คือ คลาสที่มีคุณสมบัติสืบทอดหรือที่รู้จักกันว่าเป็นคลาสตั้งต้น (Base Class)
จากภาพ หมายความว่า Animal class ถือว่าเป็น Base Class ส่วน dog class, Cat class และ Cow class จะเป็นเพียง Derived Class ของ Animal class ซึ่งการสืบทอดความสามารถจะมีหลายแบบ แต่ในหัวข้อนี้จะกล่าวถึงเพียงแค่ 3 แบบ คือ การสืบทอดทางเดียว (Single Inheritance) การสืบทอดหลายรายการ (Multiple Inheritance) และการสืบทอดหลายนะดับ (Multilevel Inheritance)
การสืบทอดทางเดียว หมายความว่า 1 Derived Class สามารถรับการสืบทอดได้ 1 Base Class เท่านั้น
การสืบทอดหลายหลายการ หมายความว่าใน 1 Derived Class สามารถสืบทอดได้มากว่า 1 Base Class
การสืบทอดหลายนะดับ หมายความว่า Derived Class สามารถรับการสืบทอด Base Class ที่สืบทอดกันมาก่อนได้
จากภาพจะเห็นได้ว่า Class C จะเป็น Base Class หลักของการสืบทอด ส่วน Class B จะเป็นทั้ง Derived Class ของ Class C และเป็น Base Class ของ Class A อีกทีหนึ่ง ทำให้ Class A ที่เป็น Derived Class สุดท้ายสามารถสืบทอดได้ทั้งคุณสมบัติของ Class B และ Class C
อย่างที่ทราบกันว่า Access Specifiers จะมีทั้งหมด 3 แบบ คือ public, private และสุดท้ายคือ protected ที่จะกล่าวถึงในหัวข้อนี้ ซึ่ง protected จะเป็นการอนุญาติการเข้าถึงข้อมูลเฉพาะ class ที่เป็น Derived class เท่านั้น
ถึงแม้ว่าใน Inheritance จะเป็นการสืบทอดความสามารถของ class แต่ไม่สามารถสืบทอดความสามารถที่ถูกจำกัดการเข้าถึงแบบ private ที่อยู่ใน Base class หมายความว่า ไม่สามารถสร้างเมดธอดหรือฟังก์ชันที่จะเข้าถึงข้อมูลที่เป็น private ของ Base class เนื่องจากเมดธอดหรือฟังก์ชันที่สร้างอยู่นอก class ที่มีข้อมูลที่ถูกกำหนดเป็น private
แหล่งอ้างอิง ::
คำถาม สามารถนำ Polymorphism มาใช้กับ Inheritance ได้หรือไม่
คำตอบ สามารถทำได้
จากตัวอย่างจะเห็นได้ว่าสามารถใช้ชื่อฟังก์ชันหรือเมดธอดซ้ำกันได้ตามหลักการของ Polymorphism แต่จะการที่จะแสดงผลลัพธ์ที่แตกต่างกันต้องให้ object ประกาศเรียกใช้ class เพื่อเข้าถึงฟังก์ชันหรือเมดธอดที่มีผลลัพธ์ตามที่ต้องการ
ตัวอย่างให้ศึกษาเพิ่มเติม ::
ตัวอย่างให้ศึกษาเพิ่มเติม ::