Java - อินเทอร์เฟซ
อินเทอร์เฟซคือประเภทการอ้างอิงใน Java มันคล้ายกับคลาส เป็นการรวบรวมวิธีการที่เป็นนามธรรม คลาสใช้อินเทอร์เฟซซึ่งจะสืบทอดวิธีการที่เป็นนามธรรมของอินเทอร์เฟซ
นอกจากวิธีนามธรรมแล้วอินเทอร์เฟซยังอาจมีค่าคงที่วิธีการเริ่มต้นวิธีการแบบคงที่และประเภทที่ซ้อนกัน เมธอดมีอยู่สำหรับเมธอดเริ่มต้นและเมธอดแบบคงที่เท่านั้น
การเขียนอินเทอร์เฟซคล้ายกับการเขียนคลาส แต่คลาสจะอธิบายถึงคุณลักษณะและพฤติกรรมของวัตถุ และอินเทอร์เฟซประกอบด้วยพฤติกรรมที่คลาสใช้
เว้นแต่ว่าคลาสที่ใช้อินเทอร์เฟซจะเป็นนามธรรมต้องกำหนดวิธีการทั้งหมดของอินเทอร์เฟซในคลาส
อินเทอร์เฟซคล้ายกับคลาสด้วยวิธีต่อไปนี้ -
อินเทอร์เฟซสามารถมีได้หลายวิธี
อินเทอร์เฟซถูกเขียนในไฟล์ที่มีนามสกุล .java โดยมีชื่อของอินเทอร์เฟซที่ตรงกับชื่อของไฟล์
รหัสไบต์ของอินเทอร์เฟซปรากฏในไฟล์ .class ไฟล์.
อินเทอร์เฟซปรากฏในแพ็กเกจและไฟล์ไบต์โค้ดที่เกี่ยวข้องต้องอยู่ในโครงสร้างไดเร็กทอรีที่ตรงกับชื่อแพ็กเกจ
อย่างไรก็ตามอินเทอร์เฟซแตกต่างจากคลาสในหลาย ๆ ด้าน ได้แก่ -
คุณไม่สามารถสร้างอินเทอร์เฟซได้
อินเทอร์เฟซไม่มีตัวสร้างใด ๆ
วิธีการทั้งหมดในอินเทอร์เฟซเป็นนามธรรม
อินเทอร์เฟซต้องไม่มีฟิลด์อินสแตนซ์ ฟิลด์เดียวที่สามารถปรากฏในอินเทอร์เฟซต้องถูกประกาศทั้งแบบคงที่และขั้นสุดท้าย
อินเทอร์เฟซไม่ได้ถูกขยายโดยคลาส มันถูกนำไปใช้โดยชั้นเรียน
อินเทอร์เฟซสามารถขยายได้หลายอินเทอร์เฟซ
การประกาศอินเทอร์เฟซ
interfaceคีย์เวิร์ดใช้เพื่อประกาศอินเทอร์เฟซ นี่คือตัวอย่างง่ายๆในการประกาศอินเทอร์เฟซ -
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างของอินเทอร์เฟซ -
/* File name : NameOfInterface.java */
import java.lang.*;
// Any number of import statements
public interface NameOfInterface {
// Any number of final, static fields
// Any number of abstract method declarations\
}
อินเทอร์เฟซมีคุณสมบัติดังต่อไปนี้ -
อินเทอร์เฟซเป็นนามธรรมโดยปริยาย คุณไม่จำเป็นต้องใช้ไฟล์abstract คำหลักขณะประกาศอินเทอร์เฟซ
แต่ละวิธีในอินเทอร์เฟซยังเป็นนามธรรมโดยปริยายดังนั้นจึงไม่จำเป็นต้องใช้คีย์เวิร์ดที่เป็นนามธรรม
วิธีการในอินเทอร์เฟซเป็นแบบสาธารณะโดยปริยาย
ตัวอย่าง
/* File name : Animal.java */
interface Animal {
public void eat();
public void travel();
}
การใช้อินเทอร์เฟซ
เมื่อคลาสใช้อินเทอร์เฟซคุณสามารถคิดว่าคลาสนั้นคือการเซ็นสัญญาตกลงที่จะดำเนินการตามพฤติกรรมเฉพาะของอินเทอร์เฟซ หากคลาสไม่ดำเนินการตามพฤติกรรมทั้งหมดของอินเทอร์เฟซคลาสจะต้องประกาศตัวเองว่าเป็นนามธรรม
คลาสใช้ไฟล์ implementsคำหลักในการติดตั้งอินเทอร์เฟซ คีย์เวิร์ด implements จะปรากฏในการประกาศคลาสหลังจากส่วนขยายของการประกาศ
ตัวอย่าง
/* File name : 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
เมื่อลบล้างเมธอดที่กำหนดไว้ในอินเทอร์เฟซมีกฎหลายข้อที่ต้องปฏิบัติตาม -
ไม่ควรประกาศข้อยกเว้นที่ตรวจสอบไว้ในวิธีการใช้งานนอกเหนือจากที่ประกาศโดยวิธีอินเตอร์เฟสหรือคลาสย่อยของข้อยกเว้นที่ประกาศโดยวิธีอินเตอร์เฟส
ลายเซ็นของเมธอดอินเทอร์เฟซและประเภทการส่งคืนเดียวกันหรือประเภทย่อยควรได้รับการดูแลเมื่อแทนที่เมธอด
คลาสการใช้งานเองอาจเป็นนามธรรมและหากเป็นเช่นนั้นก็ไม่จำเป็นต้องใช้วิธีการเชื่อมต่อ
เมื่ออินเทอร์เฟซการใช้งานมีกฎหลายข้อ -
คลาสสามารถใช้งานได้มากกว่าหนึ่งอินเทอร์เฟซในแต่ละครั้ง
คลาสสามารถขยายได้เพียงคลาสเดียว แต่ใช้อินเทอร์เฟซจำนวนมาก
อินเทอร์เฟซสามารถขยายอินเทอร์เฟซอื่นได้ในลักษณะเดียวกันเนื่องจากคลาสสามารถขยายคลาสอื่นได้
การขยายอินเตอร์เฟส
อินเทอร์เฟซสามารถขยายส่วนต่อประสานอื่นในลักษณะเดียวกับที่คลาสสามารถขยายคลาสอื่นได้ extends คีย์เวิร์ดใช้เพื่อขยายอินเทอร์เฟซและอินเทอร์เฟซลูกสืบทอดวิธีการของอินเทอร์เฟซหลัก
อินเทอร์เฟซ Sports ต่อไปนี้ถูกขยายโดยอินเตอร์เฟสฮอกกี้และฟุตบอล
ตัวอย่าง
// Filename: Sports.java
public interface Sports {
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
}
// Filename: Football.java
public interface Football extends Sports {
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}
// Filename: Hockey.java
public interface Hockey extends Sports {
public void homeGoalScored();
public void visitingGoalScored();
public void endOfPeriod(int period);
public void overtimePeriod(int ot);
}
อินเทอร์เฟซ Hockey มีสี่วิธี แต่สืบทอดมาจาก Sports สองอย่าง ดังนั้นคลาสที่ใช้ฮอกกี้จำเป็นต้องใช้ทั้งหกวิธี ในทำนองเดียวกันคลาสที่ใช้ฟุตบอลจำเป็นต้องกำหนดสามวิธีจากฟุตบอลและสองวิธีจากกีฬา
การขยายหลายอินเทอร์เฟซ
คลาส Java สามารถขยายคลาสพาเรนต์ได้เพียงคลาสเดียว ไม่อนุญาตให้มีการสืบทอดหลายรายการ อินเทอร์เฟซไม่ใช่คลาสอย่างไรก็ตามอินเทอร์เฟซสามารถขยายได้มากกว่าหนึ่งอินเทอร์เฟซหลัก
คีย์เวิร์ดขยายถูกใช้ครั้งเดียวและอินเทอร์เฟซหลักถูกประกาศในรายการที่คั่นด้วยเครื่องหมายจุลภาค
ตัวอย่างเช่นหากอินเทอร์เฟซ Hockey ขยายทั้งกีฬาและกิจกรรมจะถูกประกาศเป็น -
ตัวอย่าง
public interface Hockey extends Sports, Event
อินเทอร์เฟซการแท็ก
การใช้อินเตอร์เฟสการขยายส่วนใหญ่เกิดขึ้นเมื่ออินเทอร์เฟซหลักไม่มีเมธอดใด ๆ ตัวอย่างเช่นอินเทอร์เฟซ MouseListener ในแพ็คเกจ java.awt.event ขยาย java.util.EventListener ซึ่งกำหนดเป็น -
ตัวอย่าง
package java.util;
public interface EventListener
{}
อินเทอร์เฟซที่ไม่มีเมธอดเรียกว่าไฟล์ taggingอินเตอร์เฟซ. วัตถุประสงค์ในการออกแบบพื้นฐานของอินเทอร์เฟซการติดแท็กมีสองประการคือ
Creates a common parent- เช่นเดียวกับอินเทอร์เฟซ EventListener ซึ่งขยายโดยอินเทอร์เฟซอื่น ๆ อีกมากมายใน Java API คุณสามารถใช้อินเทอร์เฟซการติดแท็กเพื่อสร้างพาเรนต์ทั่วไปในกลุ่มของอินเทอร์เฟซ ตัวอย่างเช่นเมื่ออินเทอร์เฟซขยาย EventListener JVM จะรู้ว่าอินเทอร์เฟซเฉพาะนี้จะถูกใช้ในสถานการณ์การมอบหมายเหตุการณ์
Adds a data type to a class- สถานการณ์นี้เป็นที่มาของคำว่าการแท็ก คลาสที่ใช้อินเทอร์เฟซการแท็กไม่จำเป็นต้องกำหนดวิธีการใด ๆ (เนื่องจากอินเทอร์เฟซไม่มี) แต่คลาสจะกลายเป็นประเภทอินเทอร์เฟซผ่านความหลากหลาย