Java อินเตอร์เฟซ
อินเตอร์เฟซ (อังกฤษ: Interface) ในการเขียนโปรแกรมภาษา Java เป็นประเภทนามธรรมคือชุดของวิธีการนามธรรมอินเตอร์เฟซที่มักจะติดต่อไปยังคำสั่ง ชั้นโดยสืบทอดโหมดอินเตอร์เฟซจึงจะได้รับมรดกอินเตอร์เฟซที่ใช้วิธีการที่เป็นนามธรรม
อินเตอร์เฟซที่ไม่ได้เป็นชั้นเรียนและวิธีการระดับอินเตอร์เฟซที่เตรียมจะคล้ายกันมาก แต่พวกเขาอยู่ในแนวคิดที่แตกต่าง ระดับอธิบายคุณสมบัติของวัตถุและวิธีการ ระดับวิธีการที่จะใช้อินเตอร์เฟซที่มี
เว้นแต่การดำเนินงานของระดับอินเตอร์เฟซเป็นนามธรรมหรืออื่น ๆ เพื่อกำหนดอินเตอร์เฟซชั้นเรียนวิธีการทั้งหมด
อินเตอร์เฟซที่ไม่สามารถ instantiated แต่ก็สามารถดำเนินการได้ คลาสที่ดำเนินการติดต่อวิธีการทั้งหมดที่อธิบายไว้ในอินเตอร์เฟซจะต้องดำเนินการมิฉะนั้นก็จะต้องได้รับการประกาศให้เป็นระดับนามธรรม นอกจากนี้ใน Java ประเภทอินเตอร์เฟซที่ใช้ในการประกาศตัวแปรที่พวกเขาจะกลายเป็นตัวชี้โมฆะหรือถูกผูกไว้กับวัตถุของอินเตอร์เฟซนี้
อินเตอร์เฟซคล้ายกับจุดชั้นเรียน:
- อินเตอร์เฟซที่สามารถมีหลายวิธี
- อินเตอร์เฟซไฟล์ .java ถูกบันทึกไว้ในตอนท้ายของไฟล์ชื่อไฟล์โดยใช้ชื่ออินเตอร์เฟซ
- อินเตอร์เฟซไฟล์ bytecode จะถูกบันทึกไว้ในแฟ้มที่ลงท้ายด้วย .class
- อินเตอร์เฟซไฟล์ bytecode สอดคล้องกับชื่อแพคเกจจะต้องตรงกับโครงสร้างไดเรกทอรี
- อินเตอร์เฟซที่ไม่สามารถนำมาใช้เพื่อยกตัวอย่างวัตถุ
- อินเตอร์เฟซที่ไม่ได้สร้าง
- วิธีการอินเตอร์เฟซทั้งหมดจะต้องมีวิธีการที่เป็นนามธรรม
- อินเตอร์เฟซที่ไม่สามารถมีตัวแปรสมาชิกที่นอกเหนือไปจากตัวแปรคงที่และครั้งสุดท้าย
- อินเตอร์เฟซที่ไม่ได้สืบเชื้อสายมาจากชั้น แต่ชั้นเรียนคือการรับรู้
- อินเตอร์เฟซที่รองรับมรดกหลาย
อินเตอร์เฟซที่ประกาศ
ไวยากรณ์ประกาศอินเตอร์เฟซจะเป็นดังนี้:
[可见度] interface 接口名称 [extends 其他的类名] { // 声明变量 // 抽象方法 }
คำหลักอินเตอร์เฟซที่จะใช้ในการประกาศอินเตอร์เฟซ นี่คือตัวอย่างง่ายๆของการประกาศอินเตอร์เฟซ
/* 文件名 : NameOfInterface.java */ import java.lang.*; //引入包 public interface NameOfInterface { //任何类型 final, static 字段 //抽象方法 }อินเตอร์เฟซที่มีคุณสมบัติดังต่อไปนี้:
- อินเตอร์เฟซเป็นนามธรรมโดยปริยายเมื่อประกาศเมื่ออินเตอร์เฟซที่ไม่จำเป็นต้องใช้คำหลักที่เป็นนามธรรม
- วิธีการอินเตอร์เฟซที่แต่ละคนเป็นนามธรรมโดยปริยายประกาศนามธรรมไม่ต้องย่อยคีย์เดียวกัน
- วิธีการอินเตอร์เฟซที่เป็นสาธารณะ
ตัวอย่าง
/* 文件名 : Animal.java */ interface Animal { public void eat(); public void travel(); }
การดำเนินงานของอินเตอร์เฟซ
เมื่อชั้นใช้อินเตอร์เฟซระดับอินเตอร์เฟซที่ทุกวิธีการเพื่อให้บรรลุ มิฉะนั้นการเรียนจะต้องได้รับการประกาศให้เป็นระดับนามธรรม
ใช้การดำเนินการระดับคำหลักที่ใช้อินเตอร์เฟซ ในการประกาศคลาสดำเนินคำหลักที่อยู่เบื้องหลังการประกาศคลาส
ใช้ไวยากรณ์อินเตอร์เฟซที่คุณสามารถใช้สูตรนี้
... implements 接口名称[, 其他接口, 其他接口..., ...] ...
ตัวอย่าง
/* 文件名 : MammalInt.java */ public class MammalInt implements Animal{ public void eat(){ System.out.println("Mammal eats"); } public void travel(){ System.out.println("Mammal travels"); } public int noOfLegs(){ return 0; } public static void main(String args[]){ MammalInt m = new MammalInt(); m.eat(); m.travel(); } }
ตัวอย่างข้างต้นรวบรวมผลมีดังนี้
Mammal eats Mammal travels
เมื่อเอาชนะวิธีการประกาศในอินเตอร์เฟซที่คุณจะต้องให้ความสนใจกับกฎต่อไปนี้:
- ระดับเมื่อใช้วิธีการของอินเตอร์เฟซที่คุณไม่สามารถโยนข้อยกเว้นบังคับเฉพาะในอินเตอร์เฟซหรือสืบทอดอินเตอร์เฟซที่ระดับนามธรรมโยนข้อยกเว้นบังคับ
- ระดับเมื่อเขียนใหม่เพื่อรักษาชื่อวิธีที่สอดคล้องกันและควรจะอยู่ที่เดียวกันหรือเข้ากันได้ชนิดการส่งคืน
- หากการดำเนินการระดับอินเตอร์เฟซเป็นนามธรรมนั้นมีความจำเป็นต้องใช้วิธีการของอินเตอร์เฟซ
ในช่วงเวลาของการดำเนินงานของอินเตอร์เฟซ แต่ยังให้ความสนใจกับกฎบางอย่าง:
- ชั้นสามารถใช้การเชื่อมต่อหลาย
- ชั้นเดียวที่สามารถสืบทอดชั้นหนึ่ง แต่สามารถใช้การเชื่อมต่อหลาย
- อินเตอร์เฟซที่สามารถสืบทอดอินเตอร์เฟซที่อื่นและชั้นเรียนที่ได้รับมรดกการเปรียบเทียบระหว่างที่คล้ายกัน
อินเตอร์เฟซการรับมรดก
อินเตอร์เฟซที่สามารถสืบทอดอินเตอร์เฟซที่อื่นที่คล้ายกันมากขึ้นระหว่างการเรียนและการถ่ายทอดทางพันธุกรรม อินเตอร์เฟซมรดกขยายคำหลักย่อยอินเตอร์เฟซที่สืบทอดวิธีการอินเตอร์เฟซผู้ปกครอง
ฮอกกี้และฟุตบอลการเชื่อมต่ออินเตอร์เฟซต่อไปนี้จะได้รับการถ่ายทอดกีฬา:
// 文件名: Sports.java public interface Sports { public void setHomeTeam(String name); public void setVisitingTeam(String name); } // 文件名: Football.java public interface Football extends Sports { public void homeTeamScored(int points); public void visitingTeamScored(int points); public void endOfQuarter(int quarter); } // 文件名: Hockey.java public interface Hockey extends Sports { public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod(int period); public void overtimePeriod(int ot); }
ฮอกกี้การเชื่อมต่อของตัวเองประกาศสี่วิธีการอินเตอร์เฟซที่สืบทอดสองวิธีจากกีฬาเพื่อที่จะตระหนักถึงความจำเป็นในการดำเนินการระดับฮอกกี้อินเตอร์เฟซที่หกวิธี
ในทำนองเดียวกันฟุตบอลอินเตอร์เฟซการใช้งานคลาสต้องการที่จะใช้ห้าวิธีการรวมทั้งสองจากอินเตอร์เฟซการกีฬา
อินเตอร์เฟซมรดกหลาย
ใน Java มรดกหลายชั้นไม่ได้เป็นกฎหมาย แต่อินเตอร์เฟซที่ช่วยให้มรดกหลาย
ในอินเตอร์เฟซของมรดกหลายขยายคำหลักเพียงครั้งเดียวในการเชื่อมต่อการติดตามรับมรดกต่อมา ดังต่อไปนี้:
public interface Hockey extends Sports, Event
ส่วนโปรแกรมข้างต้นจะถูกต้องตามกฎหมายที่กำหนดไว้อินเตอร์เฟซย่อยซึ่งแตกต่างจากชั้นเรียนที่อินเตอร์เฟซที่ช่วยให้มรดกหลายและกีฬาและกิจกรรมอาจกำหนดหรือสืบทอดวิธีการเดียวกัน
อินเตอร์เฟซมาร์กเกอร์
อินเตอร์เฟซที่ได้รับมรดกที่พบมากที่สุดไม่ได้มีวิธีการของอินเตอร์เฟซใด ๆ
โดยจะระบุอินเตอร์เฟซที่ไม่มีวิธีการอินเตอร์เฟซและคุณสมบัติ. มันเป็นเพียงการแสดงให้เห็นว่ามันเป็นประเภทเฉพาะของชั้นเรียนสำหรับรหัสอื่น ๆ เพื่อทดสอบได้รับอนุญาตให้ทำอะไรบางอย่าง
ระบุบทบาทของอินเตอร์เฟซ: ภาพที่เรียบง่ายของวัตถุนั้นคือการทำให้เครื่องหมาย (สร้างแสตมป์) หรือทำให้วัตถุมีสิทธิพิเศษบางอย่าง
ตัวอย่างเช่นแพคเกจ java.awt.event การเชื่อมต่ออินเตอร์เฟซ MouseListener มรดก java.util.EventListener มีการกำหนดไว้ดังต่อไปนี้:
package java.util; public interface EventListener {}
ไม่มีทางอินเตอร์เฟซที่เรียกว่าอินเตอร์เฟซที่เครื่องหมายไม่เป็น อินเตอร์เฟซที่เครื่องหมายส่วนใหญ่จะใช้สำหรับจุดประสงค์สอง
- สถานประกอบการของอินเตอร์เฟซผู้ปกครองร่วมกัน
เป็นอินเตอร์เฟซ EventListener ซึ่งประกอบด้วยหลายสิบของการเชื่อมต่อขยาย Java API คุณสามารถใช้อินเตอร์เฟซเครื่องหมายเพื่อสร้างชุดของอินเตอร์เฟซอินเตอร์เฟซผู้ปกครอง ตัวอย่างเช่นเมื่อมีอินเตอร์เฟซที่สืบทอดอินเตอร์เฟซ EventListener, โปรแกรม Java Virtual Machine (JVM) ที่จะรู้ว่าอินเตอร์เฟซที่จะใช้สำหรับโปรแกรมของตัวแทนเหตุการณ์
- การเพิ่มชนิดของข้อมูลระดับ:
สถานการณ์นี้เป็นอินเตอร์เฟซที่ติดแท็กวัตถุประสงค์เดิม, คลาสที่ใช้อินเตอร์เฟซที่เครื่องหมายไม่จำเป็นต้องกำหนดวิธีการอินเตอร์เฟซใด ๆ (เป็นอินเตอร์เฟซเครื่องหมายเป็นเพียงวิธีไม่มี) แต่ชั้นเรียนออกเป็นประเภทอินเตอร์เฟซที่ผ่าน polymorphism