บทความนี้ถือเป็นความทรงจำที่ดีในช่วงหนึ่งในเรื่อง OOP
และถือเป็นบทความแรกต้อนรับปิดเทอมใหญ่ 2 เดือนของผม
ก่อนอื่นเลยผมขอย้อนไปเรื่อง Collections
เพื่อสร้างคำถามคาใจให้หลายๆคนเหมือนที่ผมเจอแล้วเราจะไปหาคำตอบกันในท้ายบทความ
เริ่มที่เรื่องการ new Instance ตามปกติที่เราทำ และเข้าใจกันดีอยู่แล้ว :
HashSet hashset = new HashSet<Integer>();
( เราจะยังไม่มองตรง <Integer> ตรงส่วนท้าย )
แต่ถ้าคุณเคยเขียน Android หรือ Java มาพอสมควร อาจจะเคยเจอโค้ดลักษณะนี้ :
Set hashset = new HashSet<Integer>();
...............เกิดเป็นคำถามมากมายขึ้นในหัว....................
แล้วไอ่หรั่งมันเกิดสั่ง add value เข้าไปได้ด้วยนะ
hashset.add(1);
hashset.add(2);
hashset.add(3);
System.out.println(hashset);
output ที่ออกมาก็ยังคงเป็น [1, 2, 3] ด้วยนะ
แล้ว method "add" ที่ไหนเล่าที่เป็นเมธอทที่ทำงานตอนเรา add value เข้าไป
"ระหว่าง method ในคลาส Set หรือ HashSet ?"
" แล้ววิธีการออกแบบคลาสแบบนี้มันคืออะไรกัน ?"
ผมจึงเริ่มหาคำตอบจากศัพท์ที่มีอยู่ไม่ถึง 1 kb ในหัวสมอง
จึงได้พบกับคำตอบที่นาย tomato ได้มาโพสอธิบายไว้ใน stackoveflow
"แท้จริงแล้วมันคือ polymorphism"
...............เกิดเป็นคำถามมากมายขึ้นในหัว....................
ผมจึงเริ่ม......
หาคำตอบ......
แต่เมื่อผมพยามหาความหมายกับคำคำนี้
poly แปลได้ว่า "โรงเรียนสารพัดช่าง"
morphism แปลได้ว่า "ซึ่มส์"
รวมกันเป็น "โรงเรียนสารพัดช่างซึ่มส์"
.........ผมเริ่มถอดใจห่างจากเรื่องเหล่านี้ไปพักหนึ่ง......
.
.
.
.
.....และเริ่มพยามใหม่อีกครั้งจึงได้คำตอบใหม่ที่เข้าใจง่ายกว่าเดิม
morphism มาจากคำว่า morph แปลได้ว่า "แปรเปลี่ยน"
สรุปได้ว่า เรื่อง polymorphism ต้องเกี่ยวข้องกับ
โรงเรียนสารพัดช่างที่มีหลายรูปร่าง (งงหนักเลยทีนี้)
ทำให้เกิดการลุกขึ้นครั้งสุดท้ายของผม (ศัพท์ที่มีอยู่ไม่ถึง 1 kb ในหัวสมอง)
ตัดสินใจเซิสหา Document จากต้นฉบับ
โดยปกติตามต้นฉบับของ Java Document แล้ว
คำว่า Polymorphism มาจากหลักการในชีววิทยา (biology)
ในการที่ "สิ่งมีชีวิตสามารถมีรูปแบบที่แตกต่างกัน"
คำตอบทั้งหมดอยู่ในเรื่อง Polymorphism
สรุปสั้นๆ คือความสามารถในตอนที่ Object ที่เป็น Parent Class จะสามารถรู้ได้ว่า
การ New Instance ของ subclass มาใส่ตัวเองนั้น .... มาจาก subclass ใด ? ....
และเมื่อเรียกใช้งาน method ก็จะใช้งาน method ของ subclass นั้นแล (Overriding)
Example
Animal.java
public class Animal {
public void running(){
System.out.println("... Animal running ...");
}
}
Cat.java
public class Cat extends Animal {
public void running(){
System.out.println("... Cat running ...");
}
}
Dog.java
public class Dog extends Animal {
public void running(){
System.out.println("... Dog running ...");
}
}
TryMyAnimal.java (MainClass)
Output
... Animal running ...
... Cat running ...
... Dog running ...
--- Access method using polymorphism ---
... Cat running ...
... Dog running ...
คำตอบก็แสดงออกมา ในบรรทัดที่ 20
นั่นคือ การทำงานใน method ของ Cat Class
นั่นคือ .... Cat running ....
และนั่นคือที่มาของคำว่า "Polymorphism"
catเตรียมวิ่ง.jpg
โอ้ว สุดยอดเลยครับ
ตอบลบบางครั้งตอนเรียน็เหมือนจะเข้าใจเรื่องนี้นะครับ แต่ไม่รู้ว่าจะใช้งานจริงอย่างไร
พอมาทำงานก็ถูกบังคับโดย example ให้เราทำตามโดยทีก็ยังงงๆอยู่
ตอนนี้เริ่มเข้าใจมากขึ้นเรื่อยๆแล้วครับ โดยมีบทความนี้ช่วยให้เข้าใจยิ่งขึ้นไปอีก
ผมเจอ List list = new ArrayList(); เป็นอีกอันนึงที่ใช้บ่อยมากครับ