Java Interface

Interface คือ พิมพ์เขียวหรือแม่แบบ(Blueprint) ของ Classes 

คำกล่าวในเชิงวัตถุคือ 
Interface คือ แม่แบบใหญ่ (ชื่อกลุ่มใหญ่ๆ)
Class คือ แม่แบบย่อย (ชื่อเฉพาะเจาะจง)
Object คือ วัตถุที่สร้างจากแม่แบบ

Classes สามารถรับแม่แบบของ Interface ไปใช้งานได้โดยการ implements Interface

keyword ที่ใช้ในกรณีของความสัมพันธ์ระหว่าง Classes และ interface มี 3 กรณีดังนี้


Interface ไม่สามารถ implements Interface ได้ และ Interface ไม่สามารถ implements Class ได้

Interface จะมีสมาชิกอยู่สองอย่างหลักๆคือ Variable และ Methods เท่านั้น

Interface และสมาชิกทั้งหมดไม่สามารถ ระบุ Access Modifier เป็น private หรือ protected ได้

Interface ไม่สามารถสร้าง Object หรือ Instance ของมันได้

Interface ไม่สามารถมี Constructor ได้ เพราะ Constructor จะทำงานตอนสร้าง Instance แต่ Interface สร้าง Instance ไม่ได้จึงไม่จำเป็นต้องมี Constructor

Method ที่ประกาศใน Interface จะเป็น Abstract Method (Method ที่ไม่มี body หรือ การทำงานใดๆเป็น Method ที่มีแต่ ชื่อและParameter) ทั้งหมด และ Method นี้ไม่สามารถใส่ keyword static หรือ final ได้ (ที่กล่าวนี้ไม่รวม Method main)

Variables ที่ประกาศใน Interface จะต้องกำหนดค่าเริ่มต้นให้มันเสมอ


Variables ที่ประกาศใน Interface จะเป็น public static final ทั้งหมด


ถ้าคุณประกาศ Variables และ Method ใน Interface ถึงแม้ว่า จะใส่หรือไม่ใส่ public static final ให้กับ Variables และ Abstract ให้กับ Method สุดท้ายแล้ว Compiler จะใส่ให้คุณอยู่ดีโดยเป็นค่า default ของมันที่มันต้องเป็น


ตัวอย่าง



















Classes ที่ implements  Interface ต้อง import ที่อยู่ของ Interface ที่ implements  ด้วยถ้าไม้ได้อยู่ใน Package เดียวกัน


Classes ที่ implements  Interface จะได้รับ Variables และ Methods ที่ประกาศ ใน Interface ที่ implements  ด้วย


Classes ที่ implements  Interface คุณไม่สามารถเปลี่ยนแปลงค่าของ Variable ที่ประกาศใน Interface  ได้


Classes ที่ implements  Interface ต้อง Override ทุก Method ที่ได้รับมาจาก Interface และต้องใส่ body ให้กับ Method ด้วย (ยกเว้น Classes ที่เป็น Abstract Class) แต่ถ้าประกาศ Variable เหมือนกับ ที่ได้รับมาจาก Interface จะเกิดปรากฎการณ์ shadowing


คุณจะสามารถเข้าถึง Interface ได้ ต้องเข้าถึงผ่าน Class ที่ implements  Interface เท่านั้น


Classes ที่ implements  Interface คุณสามารถสร้าง Instance ของ Classes ดังกล่าว โดยกำหนด Data type ของตัวแปร ที่เก็บค่าของ Instance เป็นชื่อ Interface ได้ (จะหมายความว่า Instance ของ Class reference ถึง Interface)


ตัวอย่าง code





subInterface สามารถ extend superInterface ได้  โดย Classes ที่ implements  subInterface นั้นจะได้รับ Variable และ Method ของทั้ง subInterface และ superInterface และต้อง Override Method เหล่านั้นทั้งหมด

หาก subInterface ประกาศ Variables หรือ Method ที่เหมือนกันกับ superInterface จะทำให้ Variables หรือ Method เหล่านั้น จะถูกสวมทับเป็นของ subInterface อย่างเดียว

ตัวอย่าง code






Classes สามารถ implements  multiple Interface ได้ โดย Classes จะได้รับ Variables หรือ Method ของทุก Interface ที่ implements  

หากประกาศ Variable ทั้ง 2 Interface เหมือนกัน และ Class implements Interface ทั้งสองนั้น Case นี้จะเกิด Error ทันที javaไม่รองรับปัญหานี้ คุณต้องแก้ไขโดยการออกแบบระบบใหม่โดยหลีกเลี่ยงไม่ให้เกิด
Case นี้ เอง

หากประกาศ Method ทั้ง 2 Interface เหมือนกัน และ Class ที่ implements Interface ทั้งสองนั้น Method มันจะแมทเป็นอันเดียว และ จะได้รับ Method ไปให้ทำการ Override เพียง 1 เดียวเท่านั้น ใน Case นี้ไม่มีปัญหาเพราะ Method ทั้งสองมันไม่มี Body อยู่แล้ว

ตัวอย่าง code






ทำไมต้องใช้ Interface ? Interface มันมีประโยชน์อะไร ? 
1. ทำให้การบำรุงรักษาและการพัฒนาสะดวกปลอดภัยกว่าเดิมเพราะไม่ต้องไปยุ่งกับ Code บางส่วน
2. สามารถทำ implements  multiple Interface ทำให้เขียน Code ได้สะดวกมากยิ่งขึ้น




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

แสดงความคิดเห็น