Inheritance หรือเรียกอย่างไทยๆว่าการสืบทอด การสืบทอดมันไม่ได้มีอะไรใกล้เคียงกับตั๊กแตนทอดหรือกล้วยทอด หรืออะไรอย่างอื่นที่ใช้น้ำมันเป็นส่วนประกอบกรรมวิธี พอกล่าวถึงเรื่องน้ำมัน ก็อยากจะบอกว่าน้ำมันปาล์มไว้ใช้ทอด น้ำมันถั่วเหลืองไว้ใช้ผัด

ไปเรื่อย…

การสืบทอดใน OOP นั้นจะคล้ายๆกับการก้อปปี้โค้ดเดิมแล้วเอามาเขียนโค้ดต่อเพิ่มเข้าไป ที่ผมใช้คำว่าคล้าย เพราะว่าการสืบทอดนั้นมันเจ๋งกว่าการก้อปปี้

สมมติว่าผมมีคลาสอยู่ตัวหนึ่ง ทำงานได้ดี

คลาสตัวนี้เอาไปใช้ในโค้ดหลายๆที่ นานไปๆก็จำไม่ได้แล้วว่าเอาไปใช้ตรงไหนบ้าง แต่ไม่เป็นไรเพราะระบบยังใช้งานได้ดี วันหนึ่งเราอยากจะได้ฟังก์ชั่นสำหรับดึงค่า idcard ออกมา แต่มันก็ใช้อยู่ที่เดียวเท่านั้น ในโค้ดใหม่ ทางเลือกที่เรามีอยู่ตอนนี้ก็คือ ก้อปปี้คลาสนี้ทั้งคลาสเลยแล้วเปลี่ยนชื่อเสียใหม่แล้วเพิ่มโค้ด / หรือแก้คลาสเดิมเลยเพิ่มโค้ดใหม่เข้าไป

2 ทางเลือกที่ให้มาถ้าเป็นระบบจริงๆมีเสียวกันบ้าง เพราะการแก้โค้ดเดิม ไม่รู้ว่ามันจะไปกระทบกับของเก่าที่นำไปใช้บ้างหรือเปล่า หากคุณเขียนโค้ดแบบ functional นะ ไม่ใช้ class นะ ทางเลือกคุณมี 2 ทางนั้นแหละ

แต่คลาสเขาออกแบบมาให้มันรองรับการสืบทอด เราเขียนคลาสใหม่สืบทอดจากคลาสเก่าแล้วเติมโค้ดใหม่เข้าไป ดอตอยอ ดูตัวอย่าง

คลาส ThaiPeople เราสืบทอดมาจากคลาส People มันจะได้ทุกอย่างทั้งฟังก์ชั่นและตัวแปรมาจากคลาส People แถมเราเขียนโค้ดเพิ่มเข้าไป getIdCard()

เวลาเรียกใช้โค้ดเก่าก็ไม่ได้ไปแก้อะไร โค้ดเขียนใหม่ก็เรียกใช้คลาส ThaiPeople ไป

ทีนี้ลองดูอีกตัวอย่าง  สมมติว่าเรากำลังวางแผนจะสร้างโปรแกรมตัวหนึ่งขึ้นมา แล้วมันมีโค้ดสองชุดที่เหมือนกัน ต่างกันนิดเดียวเอง  ทางเลือกของการสร้างโค้ดชุดนี้คือ สร้างมัน 2 ชุดเลย หรือว่า โค้ดที่เหมือนกันสร้างเป็นคลาสกลางไว้ จากนั้นค่อย extends โค้ดมาเขียนส่วนที่ต่างกันเข้าไป

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

ดอตอยอ ดูตัวอย่าง

คุณสมบัติการสืบทอด ใช้คำสั่ง extends ทำเอา