วันจันทร์ที่ 15 กันยายน พ.ศ. 2551

inheritance

inheritance เป็นคุณสมบัติในการถ่ายทอดเป็นจุดเด่นอย่างหนึ่งของ OOP โดยสามารถสร้างคลาสหลักขึ้นมา 1 คลาสแล้วกำหนดให้มีคุณสมบัติต่างๆ ที่จำเป็นต้องมี แล้วจึงสร้างคลาสอีกคลาสหนึ่งขึ้นมาเพื่อรับคุณสมบัติทั้งหมดจากคลาสหลัก และเพิ่มคุณสมบัติอื่นเข้าไปอีกในคลาสนี้ เราจะเรียกคลาสหลักว่า “Superclass”(คลาสแม่) และเรียกคลาสย่อยว่า “Subclass”(คลาสลูก)

จากรูป Class A ก็เปรียบเหมือน “Superclass” ซึ่งเป็นคลาสหลักที่เป็นต้นแบบ ส่วน Class B และ Calss C นั้นเป็นคลาสที่สืบทอดคุณสมบัติจาก Class A มาอีกทีนึงเราเรียกว่า “Subclass” ซึ่งภายในคลาส B และ C จะสามารถเข้าถึงสมาชิกหรือ Method ต่างๆ ของคลาส A ได้ ตัวอย่างเช่น

การสร้าง Superclass และ Subclass
Superclass จะสร้างเหมือนกับการสร้าง Class ทั่วไป แต่การสร้าง Subclass จะระบุคำว่า “extends” ร่วมด้วยเพื่อให้ทราบว่า Subclass จะใช้คุณสมบัติจาก Superclass ชื่ออะไร มีรูปแบบดังนี้

class ชื่อ subclass extends ชื่อ superclass
เช่น class B extends class A จะหมายถึง คลาส B เป็น subclass ของ class A ตัวอย่างเช่น

class A { int x ; }

class B extends class A { int y ; }

ทำการสร้าง instance จากคลาสทั้ง 2
A a = new A() ;
B b= new B() ;

คลาส A มีสมาชิก 1 ตัวคือ x และคลาส B สืบทอดคุณสมบัติของคลาส A โดยในคลาส B มีสมาชิก 1 ตัวคือ y เมื่อเราสร้าง insatnce จากคลาส B เราจะได้สมาชิกของคลาส A คือ x มาใช้งานได้ด้วย ลองมาดูตัวอย่างจากโปรแกรมกัน

อธิบายโปรแกรม โปรแกรมนี้มี 3 class โดยที่ class out2 จะสืบทอดคุณสมบัติจาก class out1 ให้เรามาดูที่ class Inherit มีการสร้าง instance 2 ตัว คือ sup จะเป็น instance ของคลาส out1 และ sub จะเป็น instance ของคลาส out2 บรรทัดที่ 24 และ 25 เป็นการ assign ค่าให้กับ i , j โดยใช้ sup จากนั้นก็เรียก showij() มาแสดงผลอันนี้ไม่แปลกนะเพราะ sup เป็น instance ของคลาส out1 อยู่แล้ว แต่พอมาดูที่บรรทัด 27 และ 28 จะเห็นว่ามีการ assign ค่าให้กับ i , j ใหม่โดยใช้ sub ซึ่งเป็น instance ของคลาส out2 ซึ่งใน out2 ไม่ได้ประกาศตัวแปรทั้งไว้เลย แต่ที่ทำแบบนี้ได้เพราะคุณสมบัติ inheritance นั่นเองที่ทำให้ sub สามารถใช้งาน i , j ได้และนอกจากนั้นยังเรียกใช้ Method showij() ที่อยู่ในคลาส out1 ได้อีกด้วยในบรรทัดที่ 30 ลองสังเกตผลลัพธ์ที่ได้ดูนะ

สำหรับเรื่อง inheritance นี้ก็ถือว่าเป็นคุณสมบัติที่สำคัญสำหรับภาษาประเภท OOP ไม่ว่าจะเป็นภาษาใดก็ตามที่โครงสร้างแบบ OOP จะต้องหนีไม่พ้นการใช้คุณสมบัติ inheritance อย่างแน่นอน

ไม่มีความคิดเห็น: