인터페이스와 추상 클래스의 차이점과 인터페이스 jdk8의 새로운 기능

추상 클래스를 비교하기 전 jdk8의 특성
1 인터페이스는 클래스와 병렬 인 인터페이스로 표현됩니다. 인터페이스를 정의한다는 것은 인터페이스의 멤버를 정의하는 것을 의미합니다.
2 인터페이스는 공용 추상 메소드 (공개 추상) 및 전역 정적 최종 변수 (공개 최종 정적),하지만 인터페이스의 메서드와 속성은이 방법으로 만 정의 할 수 있기 때문에 인터페이스에서 생략 할 수 있습니다. 인터페이스에 비 추상적 메서드가 없음을 알 수 있습니다. 추상 클래스는 추상 메서드와 일반 메서드가 있습니다
3. 인터페이스는 추상이 아닙니다 클래스는 전혀 인스턴스화 할 수 없습니다 추상 메서드에는 생성자가 있지만 인스턴스화 할 수 없습니다
4. 인터페이스는 클래스에서 구현을 구현하여 사용할 수 있습니다. 인터페이스를 상속하는 클래스는 모두 인터페이스의 추상 메서드를 구현하거나 추상 클래스로 선언됩니다
.5, Java 인터페이스는 클래스 (추상 클래스) 단일 상속 부적절 함을 구성하는 것 이상을 달성 할 수 있습니다
.6, 클래스 및 클래스 관계 상 속됨 (상속is-a클래스와 인터페이스 사이의 관계는 실현입니다 (인터페이스의 실현은너는 할수 있니인터페이스 간의 관계), 인터페이스와 인터페이스간에 다중 상속이있을 수 있습니다.
7. 인터페이스는 실제로 일종의 사양이지만 다형성을 반영합니다. 인터페이스는 시스템 아키텍처 설계 방법에서 더 많은 역할을하며 주로 모듈 간 정의에 사용됩니다. 통신 계약. 추상 클래스는 특정 사물의 공통성을 추출하고 코드 구현에 역할을하는 것으로 코드의 재사용을 실현할 수 있으며 기본 클래스에 적합합니다.

인터페이스의 일반적인 경우 :
모든 데이터베이스 (mysql, orcle, sql 서버)에 공통적 인 작업을위한 jdbc의 일반적인 응용 프로그램, 항목 삭제, 수정 및 확인 ... 데이터베이스 인터페이스 상속 형식 사용, 메서드 이름 표준화 및 통합, 즉, 서로 다른 데이터베이스가 통합 된 기능을 제공합니다. 동일한 메소드 이름 (재 작성을 위해)이지만 내부 구현 세부 사항은 데이터베이스 유형과 관련이 있습니다. 프로그래머는 특정 메소드 본문과 관련 될 필요가 없으며 작업을 성공적으로 완료하려면 데이터베이스 작업 방법을 능숙하게 호출하십시오. 반대로 사양을위한 jdbc 인터페이스가 없다면 주요 데이터베이스 공급 업체는 매우 이상한 문법 API를 다양하게 생산할 것이며 결국 프로그래머는 고통을 겪고 자바 생태계도 오염 될 것입니다.

새로운 jdk8의 기능
, 당신은 또한 기본 방법 공공 기본 / defalut 및 정적 방법 다음과 같은 영향이 공공 정적 / 정적 정의 할 수 있습니다, 글로벌 상수와 추상 메서드를 정의하는 것 외에도
1.이 도구 클래스의 상태가 위협한다을 예를 들어 인터페이스에는 공용 정적 메서드를 사용하여 Collection (인터페이스)이 Collections (일반 클래스)를 점차적으로 대체 할 수 있습니다.
2. 인터페이스의 어댑터 모드 어댑터도 인터페이스의 기본 방법의 탄생으로 인해 제거됩니다.

interface USB{
    
    
    //相当于public static final String name = "USB";
    String name = "USB";
    //相当于public abstract void start();
    void start();
    void stop();
    //jdk8新特征
    public static void show(){
    
    
        System.out.println("这是USB接口");
    }
    //接口实现类或匿名实现类都可以调用
    default void say(){
    
    
        System.out.println("这个实现类是USB接口的实现类");
    }
}

class Flash implements  USB{
    
    
    public static final int a = 1;
    @Override
    public void start() {
    
    
        System.out.println("U盘开始工作");
    }

    @Override
    public void stop() {
    
    
        System.out.println("U盘结束工作");
    }
}

class Printer implements  USB{
    
    

    @Override
    public void start() {
    
    
        System.out.println("打印机开始工作");
    }

    @Override
    public void stop() {
    
    
        System.out.println("打印机结束工作");
    }
}

class Computer {
    
    
    public void transmit(USB usb) {
    
    
        usb.start();
        System.out.println("传输数据.......");
        usb.stop();
    }

    public static void main(String[] args) {
    
    
        Flash flash = new Flash();
        Computer computer = new Computer();
        computer.transmit(flash);

        //传入USB的匿名类对象参数的方式一
        USB phone = new USB() {
    
    
            @Override
            public void start() {
    
    
                System.out.println("手机传输开始");
            }

            @Override
            public void stop() {
    
    
                System.out.println("手机传输结束");
            }
        };
        computer.transmit(phone);
        //传入USB的匿名类对象参数的方式二
        computer.transmit(new USB() {
    
    
            @Override
            public void start() {
    
    
                System.out.println("MP3传输开始");
            }

            @Override
            public void stop() {
    
    
                System.out.println("MP3传输结束");
            }
        });

        //jdk8新特性测试
        USB.show();
        phone.say();
    }
}

가동 결과
여기에 사진 설명 삽입

추천

출처blog.csdn.net/wwwwwww31311/article/details/113172631