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- สถานการณ์นี้เป็นที่มาของคำว่าการแท็ก คลาสที่ใช้อินเทอร์เฟซการแท็กไม่จำเป็นต้องกำหนดวิธีการใด ๆ (เนื่องจากอินเทอร์เฟซไม่มี) แต่คลาสจะกลายเป็นประเภทอินเทอร์เฟซผ่านความหลากหลาย