360 likes | 538 Views
บทที่ 7 การสืบทอด (Inheritance) . และ (Reusable) การนำ กลับ มาใช้ใหม่. ทบทวนความรู้เดิมก่อนเรียน. ระดับการเข้าใช้ class ,attribute, method ระดับ ต่าง ๆ public กำหนดให้ class, attribute, method ? ไม่ได้เขียนอะไร กำหนดให้ class ,attribute, method ?
E N D
บทที่ 7การสืบทอด (Inheritance) และ (Reusable) การนำกลับมาใช้ใหม่
ทบทวนความรู้เดิมก่อนเรียนทบทวนความรู้เดิมก่อนเรียน ระดับการเข้าใช้ class ,attribute, method ระดับ ต่างๆ • public กำหนดให้ class, attribute, method? • ไม่ได้เขียนอะไร กำหนดให้ class ,attribute, method ? • protected กำหนดให้ attribute, method ? • private กำหนดให้ attribute , method?
เนื้อหา ตอนที่ 1 • การสืบทอด (Inheritance) • class แม่ (super class) , class ลูก (subclass) • รู้จัก keyword“extends” • รู้จักคำว่า method Overriding (การ override เมธอด) • รู้จัก keyword“super” • final class ,final method
การสืบทอด (Inheritance) คืออะไร เป็นคุณสมบัติหนึ่งของ OOP ที่อนุญาตให้ผู้เขียนโปรแกรมสามารถสร้าง class ใหม่โดยสืบทอดเอาคุณสมบัติต่าง ๆ มาจาก class ที่มีอยู่แล้ว
คลาสแม่(superclass ), คลาสลูก(supclass) คืออะไร “เมื่อ class หนึ่งสืบทอดคุณสมบัติมาจากอีก class หนึ่ง” • เราจะเรียกclassที่ถูกสืบทอดคุณสมบัติไปว่า คลาสแม่(superclass) • และเรียก class ที่สืบทอดคุณสมบัติมาว่า คลาสลูก(subclass) เช่น classA เป็นคลาสแม่ของ class B (class B เป็นคลาสลูกของ class A) คือclass B ทำการสืบทอดคุณสมบัติมาจาก class A
Keyword “extends” ใช้ระบุให้กับ class เพื่อกำหนดว่า class นั้น ต้องการสืบทอดคุณสมบัติมาจาก class ใด รูปแบบ superclass, คลาสแม่ subclass, คลาสลูก [modifier] class ชื่อคลาส extendsชื่อคลาสที่ถูกสืบทอด{ }
ข้อแตกต่าง [modifier] class ชื่อคลาส { } [modifier] class ชื่อคลาส extendsชื่อคลาสที่ถูกสืบทอด{ }
ตัวอย่าง1 ชื่อคลาส ชื่อคลาสที่ถูกสืบทอด public class Student extends People{ } • อธิบาย • class Student สืบทอดคุณสมบัติมาจาก class People • class Student เป็น supclass(คลาสลูก) • class People เป็น superclass(คลาสแม่)
ตัวอย่าง2 ชื่อคลาส ชื่อคลาสที่ถูกสืบทอด public class Manager extends Employee{ } • อธิบาย • class Managerสืบทอดคุณสมบัติมาจาก class Employee • class Managerเป็น supclass(คลาสลูก) • class Employeeเป็น superclass(คลาสแม่)
class แม่สามารถถ่ายทอดอะไรให้แก่ class ลูก? • ถ่ายทอด attribute , method class ลูกสามารถเรียกใช้งาน attribute และ methodที่สืบ ทอดมาได้เลย เสมือนถูกสร้างไว้ใน class ลูกเอง • นอกจากนี้ class ลูกสามารถกำหนด attribute ,method สร้างเพิ่มเติมเข้าไปใน class ลูกได้ด้วย • ดังนั้น class ลูกมี attribute และ method ที่ได้รับถ่ายทอดมา และก็มี attribute และ method ที่สร้างขึ้นมาเองเพิ่มเติม
Inheritance (การสืบทอดคุณสมบัติ) คลาสแม่ (Super Class) “Employee” Emp_ID position Emp_ID Position Emp_ID Position Position_Car Hout_per_mounth คลาสลูก (SubClass) “SecurityGuard” คลาสลูก (SubClass) “Manager
single inheritance • class 1 class สามารถ extends มาจาก class ใดๆ ได้แค่ 1 class ตัวอย่างที่ผิด class A extends B,C{ }
ทำไมต้องสืบทอด ? • การที่เรานำหลักการของ inheritance มาใช้ก็เพื่อประหยัดเวลาในการสร้าง class คือ จะได้นำสิ่งที่มีอยู่แล้วใน class เดิมมาใช้ได้เลย โดยที่ไม่ต้องเสียเวลาสร้างใหม่
ฝึกปฏิบัติไปด้วย จะได้เข้าใจมากยิ่งขึ้น
People - name : String + age : int # address :String + setName(n:String) + getName(): String คลาสแม่super class Student - name : String + age : int # address : String + grade :double + setName(n:String) + getName(): String + printData() extends Student + grade :double + printData() คลาสลูกsub class
People - name : String + age : int # address : String + setName(n:String) + getName(): String
People - name : String + age : int # address : String + setName(n:String) + getName(): String extends Student + grade :double + printData()
People - name : String • + age : int • # address : String + setName(n:String) + getName(): String สร้าง class “Test_Student”ขึ้นใหม่เพื่อทดลองเรียกใช้ Class Student extends Student + grade :double + printData()
Overriding คืออะไร? คือ“การแก้ไข method ที่ได้รับการ ถ่ายทอดมาจาก class แม่”
อย่างไรถึงเรียกว่า เมธอดถูกทำการ Override • เมธอดใน class ลูกมีชื่อเหมือนกับ เมธอดใน class แม่ • ค่าที่ถูกส่งกลับออกไป (return type) เป็นข้อมูลชนิดเดียวกัน • argument ที่ส่งเข้ามาใน method จำนวนข้อมูลและชนิดข้อมูลเดียวกัน (เหมือนกัน)
ประโยชน์ของการ Overriding • จะช่วยให้ class ลูกสามารถแก้ไขหรือเพิ่มเติมการทำงานบางอย่างของเมธอดที่ได้รับการถ่ายทอดมาจาก class แม่ • กระบวนการนี้เรียกว่า method overriding
ตัวอย่าง method จาก class แม่ method ของ class ลูก
ตัวอย่าง method จาก class แม่ method ของ class ลูก
การแก้ไข ระดับการเข้าใช้ (Access modifier) • Access modifier ต้องมากกว่าหรือเท่ากัน private package , default ,none protected public มาก
การแก้ไข ระดับการเข้าใช้ (Access modifier) • Access modifier ต้องมากกว่าหรือเท่ากัน private package , default ,none protected public มาก
Overriding methods People - name : String + age : int # address : String + setName(n:String) + getName(): String extends Student + grade :double + getName(): String + printData()
ทดสอบเรียกใช้ Overridden Methods People - name : String + age : int # address : String + setName(n:String) + getName(): String สร้าง class เพื่อทดสอบชื่อ”Test_Student2” extends Student + grade :double + getName(): String + printData()
รู้จัก keyword “super” เป็น keyword ที่ใช้อ้างอิงถึง member[attribute,method]ของ superclassของ class นั้น ๆ รูปแบบ super.ชื่อเมธอด([อากิวเมนต์]); super.ชื่อattribute;
การเรียกใช้ overridden methods โดย super ตัวอย่าง 1 People - name : String + age : int # address : String + setName(n:String) + getName(): String • แก้ไข class Student ดังนี้ extends Student + grade :double + getName(): String + printData()
ทดสอบ People - name : String + age : int # address : String + setName(n:String) + getName(): String extends Student + grade :double + getName(): String + printData()
การเรียกใช้ overridden methods โดย super ตัวอย่าง 2 • แก้ไข class Student ดังนี้
การห้ามสืบทอด class (final class) • ถ้าเราไม่ต้องการให้มี class ใดมาสืบทอดคลาสนี้ได้ สามารถกำหนด keywordfinal ประกอบกับการประกาศ class ตัวอย่าง 1.สร้าง class “A” กำหนด final ประกอบกับการประกาศ class 2. สร้าง class “B” เพื่อทดสอบ extends
การปกป้องไม่ให้ override method (final method) • ถ้าเราไม่ต้องการให้มี class ที่สืบทอด override เมธอดใดเรา สามารถกำหนด keywordfinal ประกอบกับการประกาศ method ตัวอย่าง 1.สร้าง class “A” ดังนี้ 2. สร้าง class “B” extends “A” แล้วทดสอบ override getID()
สรุป • การสืบทอดในแนวคิดของ OOP ใช้แนวความคิดเดียวกับการถ่ายทอดคุณลักษณะจากพ่อและแม่ • การสืบทอดทำให้เกิดการนำไปใช้ใหม่ได้ (Reusable) • เมธอดที่ใช้กับ class แม่ได้ ก็สามารถใช้กับ class ลูกได้ • class ลูกสามารถ override เมธอดใน class แม่ได้ • ถ้า class ลูกอยู่ต่าง package กับ class แม่ ,class ลูกสามารถเรียกใช้ เมธอดของ class แม่ได้ในกรณีที่ methodกำหนดการเข้าใช้ระดับ public หรือ protected
final • กำหนดให้กับ class ? • กำหนดให้กับ attribute ? • กำหนดให้กับ method ?