>Java >java지도 시간 >05.Java 기초 - 인터페이스

05.Java 기초 - 인터페이스

黄舟
黄舟원래의
2017-02-27 10:21:561839검색

기본 개념

인터페이스(인터페이스)는 일반적으로 다른 사람이 호출하는 메소드나 기능을 의미합니다. . 이는 추상적 개념을 한 단계 더 발전시킵니다.

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");
    }
}

중첩 인터페이스

중첩 인터페이스는 두 가지 형식으로 제공됩니다.

  • 클래스에서 인터페이스를 정의합니다. >인터페이스 내에서 인터페이스를 정의합니다.

  • 1. 클래스에 인터페이스를 정의합니다.

인터페이스는 클래스에 중첩되어 있으며 다음과 같은 특징이 있습니다.

인터페이스 접근 권한에는 제한이 없으며, 개인 수정을 사용할 수 있습니다.

  • 메서드/추상 메서드/변수에 대한 접근 권한은 다음과 같습니다. 외부 인터페이스와 일치

  • 다음은 예제를 통해 확인됩니다.

    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. 구문 차이


추상 클래스는 비추상 메소드를 포함할 수 있지만 인터페이스에는 추상 메소드만 존재할 수 있습니다.

  • 추상 클래스의 멤버 변수는 다양한 유형일 수 있지만 인터페이스의 멤버 변수는

    공개 정적 상수
  • (공개 정적 최종)만 가능합니다.
  • 추상 클래스에는 정적 코드 블록과 정적 메서드가 포함될 수 있지만 인터페이스에는 정적 코드 블록과 정적 메서드가 포함될 수 없습니다.

  • 클래스는

    하나의
  • 추상 클래스만 상속할 수 있지만 클래스는
  • 여러

    인터페이스를 구현할 수 있습니다.

  • 2. 차이점을 활용하세요

추상 클래스는 전체(속성, 동작)를 추상화한 반면 인터페이스는 사물의 추상화 로컬(행동) 추상화. 간단히 예로 들자면 비행기와 새는 서로 다른 종류이지만 모두 날 수 있다는 공통점이 있습니다.

디자인할 때 비행기를 비행기처럼, 새를 새처럼 디자인할 수 있습니다.

그러나 비행의 특징은 클래스로 설계될 수 없으므로 행동적 특징일 뿐이며 사물의 클래스에 대한 추상적인 설명은 아닙니다.

이 시점에서 flight는 fly() 메서드를 포함하여 Fly 인터페이스로 설계할 수 있으며, 이후 Airplane과 Bird는 각각 필요에 따라 Fly 인터페이스를 구현합니다.

그러면 전투기, 민간 항공기 등 다양한 유형의 항공기는 비행기 클래스를 직접 상속할 수 있습니다. 새도 마찬가지입니다. .

여기에서 상속은 "is it" 관계인 반면 인터페이스 구현은 "is it" 관계임을 알 수 있습니다.

클래스가 추상 클래스를 상속하는 경우 하위 클래스는 추상 클래스 유형이어야 하며 인터페이스 구현은 새가 날 수 있는지 여부(또는 비행 능력 이 기능), 날 수 있으면 이 인터페이스를 구현할 수 있고, 날 수 없으면 이 인터페이스를 구현할 수 없습니다.

위 내용은 05.Java Basics - Interface 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.