>  기사  >  Java  >  Java의 추상 클래스와 인터페이스 간의 구문과 디자인의 차이점

Java의 추상 클래스와 인터페이스 간의 구문과 디자인의 차이점

php是最好的语言
php是最好的语言원래의
2018-07-27 10:04:091847검색

이 기사에서는 Java의 추상 클래스와 인터페이스의 차이점을 설명합니다. 1. 구문 수준의 차이점 2. 디자인 수준의 차이점.

1. 구문 수준의 차이점

 1) 추상 클래스는 멤버 메서드의 구현 세부 정보를 제공할 수 있지만 인터페이스에는 공용 추상 메서드만 존재할 수 있습니다.

 2) 추상 클래스의 멤버 변수는 다양한 유형이 될 수 있습니다. 인터페이스의 변수는 공개 정적 최종 유형이어야 합니다.

 3) 인터페이스는 정적 코드 블록과 정적 메서드를 포함할 수 없지만 추상 클래스는 정적 코드 블록과 정적 메서드를 가질 수 있습니다.

 4) 클래스는 상속만 가능합니다. 추상 클래스이며 클래스는 여러 인터페이스를 구현할 수 있습니다.

2. 디자인 수준의 차이점

 1) 추상 클래스는 사물의 추상화, 즉 클래스의 추상화인 반면 인터페이스는 동작의 추상화입니다. 추상 클래스는 속성과 동작을 포함하여 클래스 전체를 추상화하지만 인터페이스는 클래스(동작)의 일부를 추상화합니다. 간단한 예를 들자면, 비행기와 새는 서로 다른 종류의 존재이지만, 모두 날 수 있다는 공통점이 있습니다. 그래서 디자인을 할 때 비행기는 비행기처럼, 새는 새처럼 디자인할 수 있지만 비행의 특성은 클래스로 디자인할 수 없으므로 이는 행동적 특성일 뿐이며 추상적인 설명이 아닙니다. 사물의 종류. 이때 flight는 fly() 메소드를 포함하여 Fly 인터페이스로 설계할 수 있으며, 이후 Airplane과 Bird는 필요에 따라 Fly 인터페이스를 구현합니다. 그런 다음 전투기, 민간 항공기 등과 같은 다양한 유형의 항공기는 비행기를 직접 상속할 수 있습니다. 새의 경우에도 마찬가지입니다. 여기에서 상속은 "is it" 관계인 반면 인터페이스 구현은 "is it is" 관계임을 알 수 있습니다. 클래스가 추상 클래스를 상속하는 경우 하위 클래스는 추상 클래스의 유형이어야 하며 인터페이스 구현은 새가 날 수 있는지 여부(또는 비행 특성이 있는지 여부)와 관련됩니다. , 날 수 있는지 여부 그러면 이 인터페이스를 구현할 수 있습니다. 날 수 없다면 이 인터페이스를 구현할 수 없습니다.

 2) 디자인 수준이 다릅니다. 많은 하위 클래스의 상위 클래스로서 추상 클래스는 템플릿 디자인입니다. 인터페이스는 동작 사양이며 방사형 디자인입니다. 템플릿 디자인이란 무엇입니까? 가장 간단한 예는 모두가 ppt에서 템플릿을 사용해 본 적이 있다는 것입니다. ppt B와 ppt C를 템플릿 A를 사용하여 디자인했다면 ppt B와 ppt C의 공통 부분은 템플릿 A입니다. 템플릿 A로 충분하므로 ppt B와 ppt C를 다시 수정할 필요가 없습니다. 예를 들어 방사형 설계에서는 특정 엘리베이터에 일종의 알람이 장착되어 있습니다. 알람이 업데이트되면 모든 알람도 업데이트되어야 합니다. 즉, 추상 클래스의 경우 새 메서드를 추가해야 하는 경우 추상 클래스에 특정 구현을 직접 추가할 수 있으며 하위 클래스는 변경할 필요가 없지만 인터페이스의 경우에는 불가능합니다. 변경되면 이 인터페이스의 모든 구현이 이에 따라 수정되어야 합니다.

인터넷에서 가장 널리 유포된 예 중 하나인 문 및 경보 예를 살펴보겠습니다. 문에는 open() 및 close()라는 두 가지 동작이 있습니다. 이때 추상 클래스와 닫힘을 통해 이 추상 개념을 정의할 수 있습니다. 인터페이스:

추상 클래스 Door {

public abstract void open();
public abstract void close();

}

  또는:

interface Door {

public abstract void open();
public abstract void close();

}

그런데 이제 알람() 기능을 갖기 위해 문이 필요한 경우 어떻게 구현합니까? 아래에는 두 가지 아이디어가 나와 있습니다.

 1) 이 세 가지 기능을 추상 클래스에 넣습니다. 이렇게 하면 이 추상 클래스에서 상속된 모든 하위 클래스에 알람 기능이 있지만 일부 문에는 알람 기능이 반드시 필요한 것은 아닙니다. 2) 이 세 가지 함수를 인터페이스에 넣으십시오. 알람 기능을 사용해야 하는 클래스는 이 인터페이스에 open() 및 close()를 구현해야 합니다. 아마도 이 클래스에는 open() 및 close()가 전혀 없을 수도 있습니다. close() 화재 경보기와 같은 두 가지 기능을 수행합니다.

  여기서 보면 Door의 open(), close() 및 Alarm()은 기본적으로 두 가지 다른 동작 범주에 속하지만 open() 및 close()는 문 자체의 고유한 동작 특성에 속한다는 것을 알 수 있습니다. () )는 확장된 추가 동작입니다. 따라서 가장 좋은 해결책은 알람() 동작을 포함하여 별도의 인터페이스로 알람을 디자인하고, 도어 열기 및 닫기 동작을 포함하는 별도의 추상 클래스로 디자인하는 것입니다. 그런 다음 Door 클래스를 상속하고 Alarm 인터페이스를 구현하는 알람 도어를 설계합니다.

interface Alram {

void alarm();

}

abstract class Door {

void open();
void close();

}

class AlarmDoor는 Door Implements Alarm {

void oepn() {
  //....
}
void close() {
  //....
}
void alarm() {
  //....
}

}

관련 기사:

인터페이스와 추상 클래스의 차이점, 인터페이스 추상 class Java

에서

인터페이스와 추상 클래스의 차이점 관련 동영상:

인터페이스와 추상 클래스의 차이점 - 최신 Java 전체 비디오 튜토리얼

위 내용은 Java의 추상 클래스와 인터페이스 간의 구문과 디자인의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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