การมีหลายรูปแบบ (Polymorphism)

การมีหลายรูปแบบ (Polymorphism) เป็นกระบวนการทำงานที่อาศัยการสืบทอด (Inheritance) และการเขียนทับ (Overriding) มาทำงานร่วมกัน จนเราสามารถสร้างออบเจ็กต์อ้างอิงเพียงออบเจ็กต์เดียว และเรียกใช้เมธอดเดียวเพื่อให้ได้ผลลัพธ์ที่หลากหลายได้

 

พยายามต่อยอดบทความนี้ โดยการอาศัยความรู้พื้นฐานจาก 2 บทความด้านล่างนะคะ จะทำให้เรารู้สึกว่าเรื่องนี้ไม่ยากจนเกินไป

 

“การสืบทอดคลาส” เราพูดถึงมันโดยเน้นไปที่การออกแบบคลาส ในขณะที่ “การเขียนทับ” เราเน้นไปที่การสร้างออบเจ็กต์จากคลาสลูกต่าง ๆ ขึ้นมา จากนั้นก็เรียกใช้เมธอด calculateSalary() จากแต่ละออบเจ็กต์ตรง ๆ เลย ทำให้ได้ผลลัพธ์ที่แตกต่างกัน

 

ในบทความนี้เราจะปรับปรุงโค้ดเฉพาะภายในคลาส Main.java เท่านั้น คือ การสร้าง ArrayList ขึ้นมาเก็บออบเจ็กต์ต่าง ๆ เอาไว้ แล้วทำซ้ำ (loop) โดยการเรียกใช้เมธอด calculateSalary() เพื่อให้ได้ผลลัพธ์ที่แตกต่างกันออกมา

 

การเรียกใช้ครั้งนี้เราไม่ได้ทำระดับออบเจ็กต์ แต่อ้างอิงไปที่ชนิดตัวแปรที่เป็นคลาสแม่ ทำให้เรามองข้ามเรื่องความแตกต่างของแต่ละออบเจ็กต์ไปได้เลย และทุก ๆ ออบเจ็กต์สามารถเรียกใช้เมธอด calculateSalary() ได้

 

ลงมือเขียนโค้ด

ปรับปรุงโค้ดในคลาส Main.java

 

 

ผลลัพธ์

จะเห็นว่า เราอ้างอิงตัวแปร emp เพียงตัวแปรเดียว เรียกใช้เมธอด calculateSalary()  เพียงเมธอดเดียว แต่ได้ผลลัพธ์ที่หลากหลายออกมา นี่คือประโยชน์ของ Polymorphism ทำให้โปรแกรมยืดหยุ่นขึ้นมาก ลองเอาไปปรับใช้ในโปรเจ็กต์ของเราดูกันนะคะ 🙂

 

 

ข้อสังเกตุ

  1. การใช้งาน ArrayList เราอ้างอิงไปที่ Employee คือคลาสแม่

การใช้งาน for loop เราก็อ้างอิงไปที่ Employee คือคลาสแม่อีกเช่นกัน

นั้นคือเหตุผลที่เราใช้ตัวแปร emp เรียกใช้เมธอด calculateSalary() ได้ เพราะคลาสลูกทั้งหมด ก็คือชนิดตัวแปรของคลาสแม่ด้วยนั่นเอง

 

  1. เรากำหนดให้คลาส Employee เป็น abstract คลาส เพราะเราตั้งใจจะสร้างคลาสนี้ขึ้นมาเพื่อให้คลาสอื่น ๆ สืบทอด ไม่ต้องการให้สร้างออบเจ็กต์จากคลาสมาใช้งาน

 

  1. เรากำหนดให้เมธอด calculateSalary() ในคลาส Employee เป็น abstract เมธอด เพราะเรารู้ว่าเมธอดนี้มีการทำงานหลายรูปแบบ และต้องการให้คลาสลูกที่สืบทอดไปเขียนโค้ดการทำงานด้วยตัวเอง

 

ธมนวรรณ มณีจันทร์

ธมนวรรณ มณีจันทร์

|:- เราเชื่อมั่นว่าการเสียสละและการแบ่งปันจะทำให้โลกใบนี้สวยงามมากขึ้น ทุกๆ จุดเริ่มต้นของการเรียนรู้ นำไปสู่การเรียนรู้ถัดไป เว็บไซต์แห่งนี้ขอเป็นส่วนหนึ่งของการแบ่งปันความรู้ที่ไม่มีที่สิ้นสุด มาร่วมกันผลักดันโลกของเราให้หมุนไปพร้อมกับพลังแห่งความรักด้วยกันนะคะ :) >>> |:- About Me! -:|