인터페이스(인터페이스)는 일반적으로 다른 사람이 호출하는 메소드나 기능을 의미합니다. . 이는 추상적 개념을 한 단계 더 발전시킵니다.
Java에서는 인터페이스 키워드를 통해 인터페이스를 정의하고 키워드 Implements를 통해 인터페이스를 구현합니다.
인터페이스는 추상 클래스보다 더 추상적이기 때문에 극도로 추상적인 클래스로 이해할 수 있습니다.
예제를 통해 인터페이스의 특징을 살펴보겠습니다.
정의 인터페이스
// 1.接口,访问权限只能是 默认(包访问权限)或 publicpublic interface Parent { // 2.成员变量,准确来说应该叫常量。具有以下特点: // 2.1.访问权限只能是 public (缺省也代表 public) ,修饰符只能是 final & static public final static String WORD = "a"; // 2.2.即使不指定,默认也是被 public fainl static 修饰 String NAME = "b"; // 2.3.不能存在空的 final 变量 ,如 int num; 但是可以被非常量表达式初始化 int num = new Random().nextInt(100); // 3.抽象方法,访问权限只能是 默认(包访问权限)或 public public abstract void print(); abstract void print(int i); // 4.普通方法,访问权限只能是 默认(包访问权限)或 public public void play(); void play(int i); }
인터페이스 구현
public class Son implements Parent { @Override public void print() { System.out.println("I am Son"); } @Override public void play() { System.out.println("Son is playing"); } }
중첩 인터페이스는 두 가지 형식으로 제공됩니다.
클래스에서 인터페이스를 정의합니다. >인터페이스 내에서 인터페이스를 정의합니다.
인터페이스 접근 권한에는 제한이 없으며, 개인 수정을 사용할 수 있습니다.
메서드/추상 메서드/변수에 대한 접근 권한은 다음과 같습니다. 외부 인터페이스와 일치
다음은 예제를 통해 확인됩니다.
public class Demo { // 内部接口 private interface A { void f(); } // 内部类 class AImpl implements A { @Override public void f() { System.out.println("AImpl.f()"); } } A getA(){ return new AImpl(); } private A a; public void receive(A a){ this.a = a; a.f(); } }
Demo demo = new Demo();// 错误,因为 A 是私有接口,不可被外部访问 // Demo.A a = demo.getA(); // 因为 A 接口不可视,所以只能通过内部类来访问 Demo.AImpl a = (Demo.AImpl) demo.getA();a.f();// 或者是这样 demo.receiveA(demo.getA());
2. 인터페이스 정의
public interface Demo { // 内部接口 interface A { void play(); } void print(); }public class DemoImpl implements Demo,Demo.A{ @Override public void play() { System.out.println("DemoImpl.play()"); } @Override public void print() { System.out.println("DemoImpl.print()"); } }public class Test{ public static void main(String[] args) { // 向上转型,只能调用 print() Demo demo = new DemoImpl(); // 向上转型,只能调用 play() Demo.A a = new DemoImpl(); } }
인터페이스 & 추상 클래스
1. 구문 차이
추상 클래스의 멤버 변수는 다양한 유형일 수 있지만 인터페이스의 멤버 변수는
공개 정적 상수추상 클래스에는 정적 코드 블록과 정적 메서드가 포함될 수 있지만 인터페이스에는 정적 코드 블록과 정적 메서드가 포함될 수 없습니다.
클래스는
하나의인터페이스를 구현할 수 있습니다.
디자인할 때 비행기를 비행기처럼, 새를 새처럼 디자인할 수 있습니다.
그러나 비행의 특징은 클래스로 설계될 수 없으므로 행동적 특징일 뿐이며 사물의 클래스에 대한 추상적인 설명은 아닙니다.
이 시점에서 flight는 fly() 메서드를 포함하여 Fly 인터페이스로 설계할 수 있으며, 이후 Airplane과 Bird는 각각 필요에 따라 Fly 인터페이스를 구현합니다.
그러면 전투기, 민간 항공기 등 다양한 유형의 항공기는 비행기 클래스를 직접 상속할 수 있습니다. 새도 마찬가지입니다. .
여기에서 상속은 "is it" 관계인 반면 인터페이스 구현은 "is it" 관계임을 알 수 있습니다.
클래스가 추상 클래스를 상속하는 경우 하위 클래스는 추상 클래스 유형이어야 하며 인터페이스 구현은 새가 날 수 있는지 여부(또는 비행 능력 이 기능), 날 수 있으면 이 인터페이스를 구현할 수 있고, 날 수 없으면 이 인터페이스를 구현할 수 없습니다.
위 내용은 05.Java Basics - Interface 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!