추상메소드의 집합
구현된 것이 전혀 없는 설계도, 껍데기(모든 멤버가 public)
객체생성은 불가하나 참조변수 타입으로는 OK.
*추상클래스(abstract)와 인터페이스의 차이점*
추상클래스는 일반 클래스인데 추상메소드를 갖고 있는 것일 뿐이다.
(변수, 생성자, 일반 메소드도 다 갖고 있다.)
인터페이스는 추상메소드, 상수필드 이외엔 갖고 있는 것이 없다.
따라서 선언부인 'public static final' 과 'public abstract' 가 생략 가능하다!
인터페이스의 상속
- 인터페이스이 조상은 인터페이스만 가능(Object가 최고 조상X)
- 다중상속 가능(추상메소드는 충돌해도 문제 없다; {몸통}이 없기 때문에 무얼 상속받아도 OK)
implements 키워드로 인터페이스를 구현하다.
다중상속이 가능해서 Mother클래스는 Person클래스를 상속하며 Basic클래스를 구현하는 것이 가능하다.
=> 인터페이스를 구현한다는 것은 추상메소드를 완성한다는 것과 같다.
인터페이스의 장점
- 두 객체 간의 '연결, 대화, 소통' 을 돕는 중간역할을 한다.
- 선언(껍데기)과 구현(알멩이)을 분리시킬 수 있게 한다.
- 인터페이스 덕분에 B가 변경되어도 A는 안바꿀 수 있게 된다. (느슨한 결합)
=> 변경에 유리하다, 유연한 코드가 된다.
- 개발시간 단축
- 표준화가 가능하다. ex) JDBC
서로 관계없는 클래스들의 관계를 맺어줄 수 있다.
default 메소드와 static메소드 (JDK 1.8이후 부터)
- 인터페이스에 새로운 메소드(추상메소드)를 추가하기 어려움을 해결하기 위해 생김.
=> 인터페이스를 구현한 하위 클래스에 일일히 추가해서 오버라이딩 해야하기 떄문에..
- 디폴트 메소드는 인스턴스 메소드(인터페이스 원칙위반)
- 디폴트 메소드가 기존의 메소드와 충돌할 때의 해결책
1. 여러 인터페이스의 디폴트 메소드간의 충돌
: 인터페이스를 구현한 클래스에서 디폴트 메소드를 오버라이딩해야 한다.
2. 디폴트 메소드와 조상 클래스의 메소드간 충돌
: 조상 클래스의 메소드가 상속(우선)되고, 디폴트 메소드는 무시된다.
=> 충돌하면 그냥 직접 다 오버라이딩 하자!!!!!
'*JAVA*' 카테고리의 다른 글
[java] API - java.lang 패키지 (0) | 2021.11.16 |
---|---|
[java] 예외(Exception) (0) | 2021.10.30 |
[java] 추상클래스(abstract) (0) | 2021.10.29 |
[java] instanceof (0) | 2021.10.29 |
[java] 다형성 (0) | 2021.10.27 |