목차
기본 개념
사례 연구
중첩 인터페이스
인터페이스는 클래스에 중첩되어 있으며 다음과 같은 특징이 있습니다.
위에서 언급했듯이 인터페이스는 추상 클래스보다 더 추상적이기 때문에 극도로 추상적인 클래스로 이해할 수 있습니다. 실제 적용에서는 둘 사이에 여전히 차이가 있습니다.
추상 클래스는 전체(속성, 동작)를 추상화한 반면 인터페이스는 사물의 추상화 로컬(행동) 추상화. 간단히 예로 들자면 비행기와 새는 서로 다른 종류이지만 모두 날 수 있다는 공통점이 있습니다.
Java java지도 시간 05.Java 기초 - 인터페이스

05.Java 기초 - 인터페이스

Feb 27, 2017 am 10:21 AM

기본 개념

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

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으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

자바의 제곱근 자바의 제곱근 Aug 30, 2024 pm 04:26 PM

자바의 제곱근

자바의 완전수 자바의 완전수 Aug 30, 2024 pm 04:28 PM

자바의 완전수

Java의 난수 생성기 Java의 난수 생성기 Aug 30, 2024 pm 04:27 PM

Java의 난수 생성기

자바의 암스트롱 번호 자바의 암스트롱 번호 Aug 30, 2024 pm 04:26 PM

자바의 암스트롱 번호

자바의 웨카 자바의 웨카 Aug 30, 2024 pm 04:28 PM

자바의 웨카

Java의 스미스 번호 Java의 스미스 번호 Aug 30, 2024 pm 04:28 PM

Java의 스미스 번호

Java Spring 인터뷰 질문 Java Spring 인터뷰 질문 Aug 30, 2024 pm 04:29 PM

Java Spring 인터뷰 질문

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Feb 07, 2025 pm 12:09 PM

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까?

See all articles