인터페이스의 본질 - 인터페이스는 특별한 추상 클래스입니다. 이 추상 클래스는 변수와 메소드의 구현 없이 상수와 메소드의 정의만 포함합니다.
인터페이스에는 추상 클래스가 갖는 몇 가지 사항이 있을 수 있습니다. 추상 클래스의 모든 메서드가 추상이면 이 추상 클래스에서 메서드를 구현할 필요가 없으며 이 추상 클래스의 모든 변수는 모두 정적 변수입니다. 변경(최종)됩니다. 이때 이러한 추상 클래스를 인터페이스로 정의할 수 있습니다. 클래스를 인터페이스로 정의하는 형식은 클래스를 선언하는 키워드인 class를 인터페이스를 선언하는 키워드인 인터페이스로 바꾸는 것입니다.
인터페이스는 특별한 추상 클래스입니다. 이 추상 클래스에서 모든 메소드는 추상 메소드이며, 이 추상 클래스의 속성(즉, 멤버 변수)은 "공용 정적 최종 유형 속성 이름"으로 선언됩니다. 이러한 방식으로 기본 선언은 다음과 같습니다. "public static final", 즉 내부 멤버 변수는 공개적이고 정적이며 변경할 수 없습니다. 따라서 인터페이스에서 상수를 선언할 때 "public static final type Constant name=value(value)" 형식으로 작성하거나, "type 상수 이름=value(value)" 형식으로 직접 작성할 수도 있습니다. )" 예를 들어 "public static final int id =10"은 "int id=10" 형식으로 직접 작성할 수 있습니다. 인터페이스의 기본 속성 선언은 모두 "public static final"이므로 "public static final"입니다. "는 생략 가능합니다. 인터페이스에 선언된 추상 메서드는 인터페이스의 모든 메서드가 추상이므로 추상 키워드로 식별할 필요가 없습니다. 따라서 "abstract" 키워드는 기본적으로 생략됩니다. , 메소드: "public void start()", "public void run()", "public void "stop()"은 이 세 메서드 앞에 추상 키워드로 식별되지 않지만 인터페이스에 선언된 메서드는 모두 추상 메서드이므로 추상 메서드이므로 추상 메서드에서는 추상 키워드가 생략됩니다. 기본적으로 선언된 메서드는 추상 메서드이므로 삭제되었습니다. 이므로 "abstract"라는 단어를 쓸 필요가 없습니다. 이는 추상 클래스에서 추상 메서드를 선언할 때와 다르며, 추상 클래스에서 추상 메서드를 선언할 때는 "abstract" 키워드를 사용해야 하며, 인터페이스에서는 "를 생략할 수 있습니다. 추상 메서드를 선언할 때는 abstract"를 사용합니다. 참고: 인터페이스에 선언된 추상 메소드는 기본적으로 "public"이며 "public"만 가능합니다. 이렇게 선언하는 이유는 C++에서 다중 상속이 발생할 때 쉽게 발생하는 문제를 수정하기 위한 것입니다. C++에서는 문제가 발생하기 쉽습니다. 문제는 다중 상속의 여러 부모 클래스가 동일한 멤버 변수를 갖는 경우 이를 참조하는 것이 상당히 번거롭고 작업 중에 다양한 문제가 발생한다는 것입니다. 이 문제를 해결하기 위해 JAVA는 인터페이스의 모든 멤버 변수를 static final로 변경했습니다. 멤버 변수가 정적 유형인 경우 멤버 변수는 특정 객체에 배타적이지 않고 전체 클래스에 속합니다. 다중 상속의 경우 하위 클래스 객체에는 실제로 여러 개의 상위 클래스 객체가 포함되는 반면, 단일 상속의 경우 하위 클래스 객체에는 상위 클래스 객체가 하나만 있습니다. 다중 상속된 하위 클래스 객체에는 여러 개의 상위 클래스 객체가 있으며 이러한 상위 클래스 객체 사이에 중복된 멤버 변수가 있을 수 있으며 이는 문제가 발생하기 쉽습니다. 따라서 다중 상속을 구현하는 데 사용되는 인터페이스를 사용하면 JAVA에서 이 문제를 피할 수 있습니다. 인터페이스로서 클래스는 인터페이스에서 상속할 수 있습니다(또는 인터페이스를 구현할 수도 있습니다). 이는 또한 다중 상속입니다. 인터페이스의 멤버 변수는 모두 정적 멤버 변수이며 전체 클래스에 속합니다. 따라서 클래스가 여러 인터페이스를 구현하더라도 문제가 되지 않으며 객체 간에 충돌이 발생하지 않습니다. 다중 인터페이스를 구현하면 다중 상속도 달성되고 다중 상속이 발생하기 쉬운 문제를 피할 수 있습니다. 이는 다중 상속을 구현하기 위해 인터페이스를 사용하는 이점입니다.
1. 인터페이스 정의
인터페이스를 정의하려면 인터페이스를 사용하십시오. 인터페이스 정의는 유사한 정의와 유사하며 인터페이스 선언과 인터페이스 본문으로 구분됩니다. 인터페이스 본문은 상수 정의와 메서드 정의의 두 부분으로 구성됩니다. 인터페이스를 정의하는 기본 형식은 다음과 같습니다.
[수정자] 인터페이스 인터페이스 이름 [상위 인터페이스 이름 목록 확장]{
[공개] [정적] [최종] 상수;
[공개] [추상] 방법;
}
수정자: 선택 사항이며 인터페이스의 액세스 권한을 지정하는 데 사용됩니다. 선택 값은 공개입니다. 생략하면 기본 액세스 권한이 사용됩니다.
인터페이스 이름: 인터페이스 이름을 지정하는 데 사용되는 필수 매개변수입니다. 인터페이스 이름은 합법적인 Java 식별자여야 합니다. 일반적으로 대문자가 필요합니다.
확장: 상위 인터페이스 이름 목록: 정의할 인터페이스가 상속되는 상위 인터페이스를 지정하는 데 사용되는 선택적 매개변수입니다. 확장 키워드를 사용하는 경우 상위 인터페이스 이름은 필수 매개변수입니다.
메소드: 인터페이스의 메소드는 정의만 될 뿐 구현되지는 않습니다.
예를 들어, 상수 PI와 두 가지 메소드가 정의된 계산용 인터페이스를 정의하면 다음과 같습니다.
public interface CalInterface { final float PI=3.14159f;//pi를 나타내는 데 사용되는 상수 PI 정의 float getArea(float r);//면적 계산 방법 정의 getArea() float getCircumference(float r);// 둘레 계산을 위한 메소드 getCircumference() }
알아채다:
Java의 클래스 파일과 마찬가지로 인터페이스 파일의 파일 이름은 인터페이스 이름과 동일해야 합니다.
2. 인터페이스 구현
인터페이스가 정의된 후에는 클래스에서 구현될 수 있습니다. 클래스에 인터페이스를 구현하려면 Implements 키워드를 사용할 수 있으며 기본 형식은 다음과 같습니다.
[수정자] class <클래스 이름> [상위 클래스 이름 확장] [인터페이스 목록 구현]{
............
}
Modifier: 클래스의 접근 권한을 지정하는 데 사용되는 선택적 매개변수로, 선택적 값은 public, abstract 및 final입니다.
클래스 이름: 클래스 이름을 지정하는 데 사용되는 필수 매개변수입니다. 클래스 이름은 합법적인 Java 식별자여야 합니다. 일반적으로 대문자가 필요합니다.
상위 클래스 이름 확장: 정의할 클래스가 어느 상위 클래스에서 상속되는지 지정하는 데 사용되는 선택적 매개변수입니다. 확장 키워드를 사용하는 경우 상위 클래스 이름은 필수 매개변수입니다.
인터페이스 목록 구현: 이 클래스가 구현하는 인터페이스를 지정하는 데 사용되는 선택적 매개변수입니다. Implements 키워드를 사용할 때 인터페이스 목록은 필수 매개변수입니다. 인터페이스 목록에 인터페이스 이름이 여러 개 있는 경우 쉼표로 구분하세요.
클래스에서 인터페이스를 구현할 때 메소드 이름, 반환 값 유형, 매개변수의 수 및 유형은 인터페이스의 것과 정확히 동일해야 하며 인터페이스의 모든 메소드가 구현되어야 합니다. 예를 들어 섹션 5.7.1에 정의된 Calculate 인터페이스를 구현하는 Cire라는 클래스를 작성합니다.
public class Cire Implements CalInterface { public float getArea(float r) { float Area=PI*r*r;//원 면적을 계산하여 변수 면적에 할당 return Area;//계산된 원 면적 반환} public float getCircumference (float r) { float Cirference=2*PI*r; //원의 둘레를 계산하고 이를 변수 둘레에 할당합니다. //계산된 둘레를 반환합니다.} public static void main(String[] args) Cire c = new Cire(); float f = c.getArea(2.0f); System.out.println(Float.toString(f));
클래스 상속에서는 단일 상속만 가능하지만 인터페이스 구현 시 여러 인터페이스를 동시에 구현할 수 있으며 각 인터페이스는 쉼표(,)로 구분됩니다.
이때, 여러 인터페이스에서 상수 또는 메소드 이름 충돌이 발생할 수 있는데, 이 문제를 해결하려면 상수의 인터페이스를 명시적으로 지정해야 합니다. 이는 "인터페이스 이름.상수"를 통해 가능합니다. 메소드 충돌이 발생하면 하나의 메소드만 구현하면 됩니다.