การเขียนทับ (Overriding)

การเขียนทับ (Overriding) เป็นกระบวนการทำงานที่อาศัยการสืบทอด (Inheritance) โดยที่คลาสแม่และคลาสลูกมีเมธอด (Method) ชื่อเดียวกัน เวลาเรียกใช้งาน เมธอดที่อยู่ในคลาสลูก จะเขียนทับเมธอดที่อยู่ในคลาสแม่

 

ยกตัวอย่างเช่น เราออกแบบคลาสเอาไว้ดังนี้

 

 

จากภาพจะเห็นว่าทุก ๆ คลาสมีเมธอด “คำนวณเงินเดือน()” แต่กระบวนการทำงานแตกต่างกัน ดังนี้

 

คลาสพนักงาน: เมธอด คำนวณเงินเดือน()

// เป็น abstract เมธอด ไม่มีการเขียนโค้ดใด ๆ (ให้คลาสลูกไปเขียนเอง)

 

คลาสผู้จัดการ: เมธอด คำนวณเงินเดือน()

// คืนค่าที่อยู่ในตัวแปร เงินเดือน

 

คลาสพนักงานขาย: เมธอด คำนวณเงินเดือน()

// คืนค่าที่อยู่ในตัวแปร เงินเดือน + ค่าคอมมิชั่น

 

คลาสพนักงานฝ่ายผลิต: เมธอด คำนวณเงินเดือน()

// คืนค่าที่อยู่ในตัวแปร เงินเดือน + ค่าทำงานล่วงเวลา (Overtime: OT)

 

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

หากเปลี่ยนรูปภาพด้านบนให้เป็นภาษาอังกฤษ เพื่อใช้ในการเขียนโค้ด จะได้ดังนี้

 

 

 

 

 

 

ทดสอบโปรแกรม

สร้างออบเจ็กต์จากคลาส Manager, Sales และ Production จากนั้นเรียกใช้เมธอด calculateSalary()

 

 

ผลลัพธ์

จะเห็นว่า เมธอด calculateSalary()  ได้เขียนทับเมธอด ที่อยู่ในคลาสแม่ ซึ่งเรากำหนดเป็น abstract เอาไว้ ทำให้แต่ละออบเจ็กต์ประมวลผลได้อย่างถูกต้อง

 

 

แบบฝึกหัด

จากบทความเรื่อง การสืบทอด (inheritance) ลองกลับไปสังเกตการทำงานของเมธอด toString() ดูนะคะว่ามันมีที่มาที่ไปอย่างไร? สามารถเขียนแบ่งปันความรู้เอาไว้ด้านล่างได้เลยค่ะ 🙂

 

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

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

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