>  기사  >  Java  >  Java의 인터페이스 및 추상 클래스

Java의 인터페이스 및 추상 클래스

伊谢尔伦
伊谢尔伦원래의
2016-12-10 09:52:271214검색

추상화는 객체지향 디자인의 주요 특징 중 하나이며, 이를 Java로 구현한 것은 추상 클래스와 인터페이스입니다. 이 둘은 매우 유사하다고 생각합니다.

추상화는 객체지향 디자인의 주요 특징 중 하나이며 Java에서의 표현은 추상 클래스와 인터페이스입니다. 둘은 매우 유사하여 많은 초보자는 물론 Java에 몇 년 동안 노출된 사람이라도 구별하기가 어렵습니다. 오늘 Collection 클래스 관련 코드를 보다가 List, Map 등과 같은 인터페이스도 있고 AbstractList, AbstractSet 등과 같은 추상 클래스도 있는 것을 발견했습니다. 두 가지가 분명해서 혼란 스럽습니다. 그래서 오늘 이 글의 저자는 둘의 차이점을 주로 소개합니다.

추상 클래스

추상 메서드

선언만 하고 구현하지 않는 메서드를 추상을 사용하여 수정하는 것을 추상 메서드라고 합니다. 예:

abstract void fun();

추상 클래스

추상으로 수정된 클래스를 추상 클래스라고 합니다. 예:

추상 클래스 ClassA{}

추상 메서드가 있는 클래스는 추상 클래스여야 합니다. 추상 클래스에는 추상 메서드가 있을 수 없습니다. 일반 클래스와 마찬가지로 추상 클래스에는 멤버 변수와 일반 멤버 메서드가 있을 수 있습니다.

추상 클래스에는 구체적인 구현이 없는 메소드가 포함되어 있으므로 추상 클래스를 사용하여 인스턴스 객체를 생성할 수 없습니다! 물론 클래스가 추상으로만 수정되고 추상 메서드가 없을 수도 있습니다. 이 클래스도 추상 클래스이므로 인스턴스화할 수 없습니다. 하지만 추상 메서드가 없다면 왜 추상 클래스로 설계할까요? 따라서 그것을 탐구할 필요가 없습니다.

함수

그러면 상속을 위한 추상클래스가 존재함을 알 수 있다. 추상 클래스를 정의했지만 상속하지 않으면 아무 소용이 없습니다. 물론 상속 후 클래스는 부모 클래스에서 구현되지 않은 모든 메서드를 구현해야 합니다. 그렇지 않으면 허용되지 않습니다(추상 클래스에서 상속된 추상 클래스가 아닌 경우 구현할 필요가 없습니다).

일반 클래스의 차이점

추상 메서드는 공개 또는 보호되어야 합니다(비공개인 경우 하위 클래스에서 상속할 수 없고 하위 클래스에서 이 메서드를 구현할 수 없기 때문입니다). 방법은 공개입니다.

추상 클래스를 사용하여 객체를 생성할 수 없습니다.

하위 클래스가 추상 클래스를 상속하는 경우 하위 클래스는 상위 클래스의 추상 메서드를 구현해야 합니다. 그렇지 않으면 하위 클래스도 추상 클래스로 정의되어야 합니다.
다른 측면에서는 추상 클래스와 일반 클래스 사이에 차이가 없습니다.

인터페이스

인터페이스는 극도로 추상적인 타입으로 추상 클래스보다 더 추상적이다. 인터페이스에는 변수와 메서드가 있을 수 있습니다. 그러나 인터페이스의 변수는 암시적으로 public static 최종 변수(private과 같은 다른 유형으로 정의되면 오류가 보고됨)로 지정되며, 이는 또한 변수가 초기화되어야 함을 의미합니다. 인터페이스의 메서드는 암시적으로 공용 추상 메서드로 지정됩니다(private, protected, static, final 등과 같은 다른 키워드를 사용하면 오류가 발생함).

그리고 인터페이스의 모든 메소드는 특정 구현을 가질 수 없으며 인터페이스의 메소드는 추상 메소드여야 합니다.

마찬가지로 추상이 아닌 클래스가 인터페이스를 구현하는 경우 모든 메소드를 구현해야 합니다. 그렇지 않은 경우 클래스는 추상 클래스 또는 인터페이스여야 합니다.

추상 클래스와 인터페이스 비교

구문 수준의 차이점

인터페이스는 공용 추상 메서드만 가질 수 있는 반면, 추상 클래스는 더 많은 메서드 유형을 가지며 일반 메서드를 가질 수 있습니다.
인터페이스의 멤버 변수는 공용 정적 최종 유형만 가능합니다. 추상 클래스는 더 많은 변수 유형을 가지며 일반 변수를 가질 수 있습니다.
인터페이스는 정적 코드 블록과 정적 메서드를 포함할 수 없지만 추상 클래스는 정적 코드를 가질 수 있습니다. 블록 및 정적 메서드
클래스는 하나의 추상 클래스만 상속할 수 있지만 클래스는 여러 인터페이스를 구현할 수 있습니다.
디자인 수준의 차이점

1) 추상 클래스는 사물의 추상화(클래스의 추상화)이고 인터페이스는 동작의 추상화입니다.

예를 들어 Bird는 추상 클래스로 정의되어 있으며, 다양한 새들이 이를 구현합니다. fly라는 인터페이스를 정의하면 다양한 새들이 이 인터페이스를 구현할 수 있습니다. 일반인의 관점에서 보면 상속은 "is it" 관계인 반면, 인터페이스 구현은 "is it is" 관계입니다. 새가 Bird를 상속받는 경우, 파리 인터페이스를 구현할지 여부는 해당 기능(행동)이 있는지 여부에 따라 유형이 결정됩니다.

2) 추상 클래스는 템플릿 디자인이고 인터페이스는 동작 사양 및 방사형 디자인입니다.

예를 들어 동일한 메서드의 경우 추상 클래스 템플릿 디자인을 사용한 후 메서드를 수정할 때 템플릿에서만 수정하면 되며 인터페이스 방사형 디자인을 사용한 후에는 모든 하위 클래스를 업데이트할 수 있습니다. , 수정 시 이 메소드는 업데이트되기 전에 모든 구현 클래스에서 서로 독립적으로 수정되어야 합니다.

두 가지 용도의 연결

1. 인터페이스가 상속되면 인터페이스도 상속되어야 합니다. 달성할 수 없습니다. 추상 클래스는 상속할 수 없습니다

2. 추상 클래스는 인터페이스를 구현하고 추상 클래스를 상속할 수 있지만 인터페이스를 상속할 수는 없습니다


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