자바-인터페이스

인터페이스는 Java의 참조 유형입니다. 클래스와 비슷합니다. 추상적 인 방법의 모음입니다. 클래스는 인터페이스를 구현하여 인터페이스의 추상 메서드를 상속합니다.

추상 메서드와 함께 인터페이스에는 상수, 기본 메서드, 정적 메서드 및 중첩 형식도 포함될 수 있습니다. 메서드 본문은 기본 메서드 및 정적 메서드에 대해서만 존재합니다.

인터페이스 작성은 클래스 작성과 유사합니다. 그러나 클래스는 객체의 속성과 동작을 설명합니다. 그리고 인터페이스에는 클래스가 구현하는 동작이 포함됩니다.

인터페이스를 구현하는 클래스가 추상적 인 경우가 아니면 인터페이스의 모든 메서드를 클래스에 정의해야합니다.

인터페이스는 다음과 같은면에서 클래스와 유사합니다.

  • 인터페이스는 여러 메소드를 포함 할 수 있습니다.

  • 인터페이스는 .java 확장자, 파일 이름과 일치하는 인터페이스 이름

  • 인터페이스의 바이트 코드는 .class 파일.

  • 인터페이스는 패키지에 나타나며 해당 바이트 코드 파일은 패키지 이름과 일치하는 디렉토리 구조에 있어야합니다.

그러나 인터페이스는 다음을 포함하여 여러면에서 클래스와 다릅니다.

  • 인터페이스를 인스턴스화 할 수 없습니다.

  • 인터페이스에는 생성자가 없습니다.

  • 인터페이스의 모든 메소드는 추상적입니다.

  • 인터페이스는 인스턴스 필드를 포함 할 수 없습니다. 인터페이스에 나타날 수있는 유일한 필드는 static 및 final로 선언되어야합니다.

  • 인터페이스는 클래스에 의해 확장되지 않습니다. 클래스에 의해 구현됩니다.

  • 인터페이스는 여러 인터페이스를 확장 할 수 있습니다.

인터페이스 선언

그만큼 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 인터페이스를 선언하는 동안 키워드.

  • 인터페이스의 각 메서드는 암시 적으로 추상이므로 abstract 키워드가 필요하지 않습니다.

  • 인터페이스의 메서드는 암시 적으로 공개됩니다.

예

/* File name : Animal.java */
interface Animal {
   public void eat();
   public void travel();
}

인터페이스 구현

클래스가 인터페이스를 구현할 때 클래스를 계약에 서명하고 인터페이스의 특정 동작을 수행하는 데 동의하는 것으로 생각할 수 있습니다. 클래스가 인터페이스의 모든 동작을 수행하지 않는 경우 클래스는 자신을 추상으로 선언해야합니다.

클래스는 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 인터페이스는 Hockey 및 Football 인터페이스로 확장됩니다.

예

// 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에서 두 가지 방법을 상속합니다. 따라서 Hockey를 구현하는 클래스는 6 개의 메서드를 모두 구현해야합니다. 마찬가지로 Football을 구현하는 클래스는 Football의 세 가지 메서드와 Sports의 두 가지 메서드를 정의해야합니다.

여러 인터페이스 확장

Java 클래스는 하나의 상위 클래스 만 확장 할 수 있습니다. 다중 상속은 허용되지 않습니다. 그러나 인터페이스는 클래스가 아니며 인터페이스는 둘 이상의 상위 인터페이스를 확장 할 수 있습니다.

extends 키워드는 한 번 사용되며 상위 인터페이스는 쉼표로 구분 된 목록으로 선언됩니다.

예를 들어, Hockey 인터페이스가 스포츠와 이벤트를 모두 확장하면 다음과 같이 선언됩니다.

예

public interface Hockey extends Sports, Event

태그 지정 인터페이스

확장 인터페이스의 가장 일반적인 사용은 부모 인터페이스에 메서드가 포함되어 있지 않을 때 발생합니다. 예를 들어, java.awt.event 패키지 확장 java.util.EventListener의 MouseListener 인터페이스는 다음과 같이 정의됩니다.

예

package java.util;
public interface EventListener
{}

메서드가없는 인터페이스를 tagging상호 작용. 인터페이스 태그 지정에는 두 가지 기본 설계 목적이 있습니다.

Creates a common parent− Java API에서 수십 개의 다른 인터페이스로 확장 된 EventListener 인터페이스와 마찬가지로 태그 인터페이스를 사용하여 인터페이스 그룹간에 공통 부모를 생성 할 수 있습니다. 예를 들어 인터페이스가 EventListener를 확장 할 때 JVM은이 특정 인터페이스가 이벤트 위임 시나리오에서 사용될 것임을 알고 있습니다.

Adds a data type to a class−이 상황은 태깅이라는 용어의 유래입니다. 태깅 인터페이스를 구현하는 클래스는 어떤 메서드도 정의 할 필요가 없지만 (인터페이스에 어떤 메서드도 없기 때문에) 클래스는 다형성을 통해 인터페이스 유형이됩니다.