Inheritance and Method Overriding อาจารย์สมเกียรติ ช่อเหมือน สาขาวิชาวิศวกรรมซอฟต์แวร์ คณะวิทยาศาสตร์และเทคโนโลยี (tkorinp@hotmail.com)
Inheritance and Method Overriding เข้าใจวิธีการใช้คลาสนามธรรมเพื่อสะท้อนคุณลักษณะทั่วไป ใช้ UML แสดงการสืบทอด การทำ method Overriding การแทนที่เมธอด ความเหมาะสมในการใช้ “Super” Implement ในภาษา Java
Object Oriented Programming using Java Object Families Generalisation and Specialisation Inheritance Implementing Inheritance in Java Constructors Constructor Rules Access Control Abstract Classes Overriding Methods The ‘Object’ Class Overriding toString() defined in ‘Object’
Object Families สิ่งมีชีวิตบนโลกมีความเกี่ยวข้องกัน แบบครอบครัว แนวคิดการส่งต่อ มรดก ไปยังลูกหลานของ พ่อแม่ เป็นแนวคิดที่สำคัญของหลักการ OOP ปกติการใช้ constructors and access control (public/private) ปัญหาเฉพาะที่เกี่ยวข้องกับการสืบทอด คือ การพิจารณาคลาสแบบนามธรรมและเมธอดที่สำคัญในการสืบทอด
Generalisation and Specialisation Class เป็นรูปแบบในการพิจารณารายละเอียดและสร้างวัตถุที่แตกต่างกัน เช่นนักศึกษารหัส 594602001 เป็นตัวอย่างของนักศึกษา รหัส 594602001 คือนักศึกษา Class สามารถหาความสัมพันธ์ที่คล้ายกัน เพื่อจัดกลุ่มและลำดับชั้น ตัวอย่างเช่น อาณาจักรสัตว์ทางชีววิทยา การจำแนกสิ่งของตามเกณฑ์
Inheritance การระบุลักษณะทั่วไปไว้ด้านบนของลำดับชั้นและเฉพาะเจาะจงมากขึ้นในลำดับถัดไป ตามหลักการเชิงวัตถุ (generalization and specialization) ลักษณะด้านบนจะถูกถ่ายทอดให้ Class หรือ Object ในลำดับถัดไปแบบอัตโนมัติ เรียกว่า “inheritance” ตัวอย่างเช่น เมื่อพิจารณาสิ่งพิมพ์ทั้งสองประเภท คือ หนังสือและนิตยสาร UML Class
Inheritance วิเคราะห์สิ่งที่เหมือนและต่างกัน สามารถรวมกันได้เป็น สามารถสืบทอดเป็นBook และ Magazine
Inheritance
Implementing Inheritance in Java Superclass เป็นคลาสที่มีคุณสมบัติพื้นฐาน Subclass สามารถระบุการสืบทอดคุณสมบัติจาก superclass โดยใช้คำหลัก extends ตัวอย่างเช่น class MySubclass extends MySuperclass { // additional instance variables and // additional methods }
Constructors แต่ละClass (ไม่ว่าจะSub หรือ Super) ควรมีการห่อหุ้ม มีการกำหนดเริ่มต้นของตัวแปร การตั้งค่าที่เกี่ยวข้องกับสถานะ Constructors ใช้สำหรับกำหนดค่าเริ่มต้นทั่วไปของ Class Subclass สามารถมีคอนสตรัคเตอร์ของตัวเองสำหรับกำหนดค่าเริ่มต้น แต่หากต้องการใช้ค่าเริ่มต้นของ Superclass ต้องใช้คำหลัก “super” Class MySubClass extends MySuperClass { public MySubClass (sub-parameters) super(super-parameters); // other initialization }
Constructors ในการสร้าง Class โดยการเรียกใช้ Constructors ถือเป็นคำสั่งแรก พารามิเตอร์ที่ส่งผ่านไปยังSubclass public Publication (String pTitle, double pPrice, int pCopies) { title = pTitle; // etc. } public Book (String pTitle, String pAuthor, double pPrice, int pCopies) { super(pTitle, pPrice, pCopies); author = pAuthor; //etc. }
Constructor Rules หาก superclass มี parameterless (หรือเริ่มต้น) คอนสตรัคเตอร์นี้จะถูกเรียกโดยอัตโนมัติ หากไม่มีการเรียกใช้อย่างชัดเจนกับซูเปอร์จะต้องสร้าง constructor ของ subclass
Access Control การใช้ protected เพื่อให้เข้าถึงได้จาก Subclass การสร้างเมธอดในการเข้าถึงและปรับเปลี่ยนค่า private int copies; public int getCopies () { return copies; } public void setCopies(int pCopies) copies = pCopies; // in Book public void orderCopies(int pCopies) { setCopies(getCopies() + pCopies); } // and in Magazine public void recvNewIssue(String pNewIssue) { setCopies(orderQty); currIssue = pNewIssue; } วิธีการเหล่านี้ช่วยให้ superclass ควบคุมการเข้าถึงตัวแปรแบบ Private
Abstract Classes แนวคิดในการสร้างคลาสที่ร่างขึ้น และป้องกันการสร้างวัตถุจากคลาสประเภทนี้ การรวบรวมคุณลักษณะทั่วไป สำหรับสืบทอดไปเป็น Subclass โดยประกาศ “abstract” abstract class SuperClassName { // etc. }
Overriding Methods Subclass สามารถสืบทอดเมธอดของ Superclass ได้ ซึ่งเป็นคุณสมบัติหนึ่งของการสืบทอด (inherited) สามารถปรับปรุงเมธอดและทำให้เมธอดเหมาะสมกับ Subclass ยิ่งขึ้น public class DiscMag extends Magazine { // the constructor public DiscMag (String pTitle, double pPrice, int pOrderQt, String pCurrIssue, int pCopies) { super(pTitle, pPrice, pOrderQty, pCurrIssue, pCopies); } // the overridden method public void recvNewIssue(String pNewIssue) super.recvNewIssue(pNewIssue); System.out.println("Check discs attached to this magazine");
The ‘Object’ Class Object หรือวัตถุ เป็นเสมือนตัวแทนของทุกอย่างในคลาสที่กำหนดขึ้น โดยเป็นส่วนบนสุดในการเข้าถึงสิ่งต่าง ๆ ที่อยู่ภายใน ประกาศ เพื่อใช้งาน object จาก Class “new” เพื่อกำหนดค่าเริ่มต้นจาก Class ให้กับ object
Overriding toString() defined in ‘Object’
Summary Inheritance ช่วยให้สะท้อนคุณสมบัติทั่วไปและพฤติกรรม โดยจำลองไว้ใน superclass subclass ถูกนำมาใช้ในการจำลองคุณลักษณะเฉพาะและพฤติกรรม code ที่เขียนใน superclass สืบทอดไปยัง subclasses ทั้งหมด ถ้าต้องการแก้ไขหรือปรับปรุง code สามารถปรับที่ superclass จะส่งผลกระทบต่อ subclasses ทั้งหมด ช่วยลดการเขียนCode ในโปรแกรม constructors ที่สามารถนำไปใช้กับ Subclass superclass สามารถกำหนดเป็น Abstract เพื่อป้องกันการสร้างวัตถุ สามารถทำ override เพื่อปรับปรุงเมธอดให้สอดคล้องกับ Subclass ใน Java ทุกคลาสสืบทอดมาจาก Class “Object” Object เป็นการกำหนดการดำเนินการแบบสากล เป็นตัวแทนในการใช้ประโยชน์จากคลาสที่กำหนด