interface

 

Interfaces ซึ่งก็คือ abstract classes ที่มีสมาชิกเป็นค่าคงที่ หรือ abstract methods เท่านั้น
การใช้งานคล้ายกับ abstract class คือนำ interface ไปประกาศ reference ได้แต่สร้าง instance ไม่ได้ และต้องสร้างคลาสที่มี implementations ของ abstract methods ใน interface นั้นให้ครบเสียก่อน จึงจะนำคลาสนั้นไปใช้งานได้เหมือนกับเป็นคลาสลูก คลาสหนึ่งของ interface นั้น
การกำหนด interface คล้ายกันการกำหนดคลาสใด ๆ แต่ใช้ keyword interface แทน class
 
มีข้อกำหนดว่าทุก method members ของ interface ต้องเป็น abstract โดย default ซึ่งจะระบุด้วย keyword abstract หรือไม่ก็ได้ หากไม่ระบุ คอมไพเลอร์ จะระบุให้เอง

และทุก ๆ data members ของ interface จะต้องเป็น static และ final โดย default ซึ่งอาจจะระบุด้วย static final หรือไม่ก็ได้ หากไม่ระบุ คอมไพเลอร์ จะระบุให้เอง
สมาชิกของ interface จะต้องเป็น public โดย default ห้ามเป็น private, protected หรือ default หากไม่ระบุด้วย public คอมไพเลอร์จะระบุให้เอง

data members ทุกตัวของ interfaces ต้องเป็น static และ final จึงเป็นคล้ายกับ ค่าคงที่ ดังนั้นที่ประโยคประกาศของ data member แต่ละตัวต้องมีการกำหนดค่าเริ่มต้นให้ มิเช่นนั้นจะไม่ผ่านการ คอมไพล์ ไม่สามารถใช้ค่า default ได้
เนื่องจากเราไม่สามารถสร้าง instance ของ interface และสมาชิกที่เป็น data members ก็ต้องมีค่าเริ่มต้นไว้แล้ว ดังนั้น interfaces จึงไม่จำเป็นต้องใช้ constructor และ คอมไพเลอร์จะไม่ยอมให้มีการกำหนด constructor ไว้ใน interface ด้วย

เมื่อ interfaces ไม่มี constructors ดังนั้น ภาษา Java ไม่ยอมให้มีการใช้ this หรือ super ทั้งในความหมายของ referece หรือ constructor ปรากฏอยู่ภายใน interface ใด ๆ data members ของ interfaces ห้ามเป็น static, synchronized, transient หรือ volatile แต่คลาสที่ทำการ implements interface นั้นอาจทำ shadowing ด้วย data member ที่เป็น static ได้

 

Method members ของ interfaces ห้ามเป็น static, native, synchronized หรือ final แต่คลาสที่ทำการ implements interface นั้นอาจ implements method นั้นเป็น native, synchronized, หรือ final ได้

 

ภาษา Java ไม่ยอมให้มีการทำ multiple inheritance นั่นคือ คลาสใด ๆ ในภาษา Java จะขยายมาจากคลาสแม่ได้เพียงคลาสเดียวเท่านั้น แม้ว่าเราสามารถออกแบบ และสร้างโปรแกรมใด ๆ ได้โดยหลีกเลี่ยง multiple inheritance แต่ในหลายกรณีการใช้ multiple inheritance จะช่วยให้การออกแบบโปรแกรมง่ายขึ้นอย่างมาก ภาษา Java จึงต้องเสนอกลไกสำหรับ multiple inheritance ในอีกแบบหนึ่งซึ่งไม่ใช่การขยายคลาส

ภาษา Java ใช้ interfaces ในการทำ multiple inheritance นั่นคือ คลาสหนึ่งจะ extends จาก คลาสแม่ได้เพียงคลาสเดียว แต่จะทำการ implements interfaces เป็นจำนวนกี่ interfaces ก็ได้

 

Forums: