1. static 메서드는 원래 인터페이스에서 사용 불가였다?
- JDK 1.8 전에는 불가능했지만, 이제는 default와 static 메서드를 사용할 수 있게
되었다.
- 옛날에는 java.util.Collection이라는 인터터페이스에 static 메서드가 있었는데 추상 메서드만
선언이 가능하다는 이유로 같이 넣지 못해서 Collections라는 클래스가 생성되게 되었다.
- static 메서드 역시 앞에 public 접근 제어자가 있고, 생략 또한 가능하다.
2. 디폴트 메서드가 등장하게 된 배경
- 인터페이스에 새로운 메서드를 추가한다는 것은 엄청나게 까다롭다. 그 이유는
인터페이스로 구현한 클래스들이 전부 다시 구현해야 하기 때문이다.
- 그러한 이유 때문에, default 메서드를 고안하여 구현할 필요없는 것을 만들어냈다.
- default 메서드 역시 앞에 public 접근 제어자가 있고, 생략 또한 가능하다.
- 충돌을 해결하는 규칙
(1) 여러 인터페이스의 디폴트 메서드 간의 충돌
--> 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야한다.
(2) 디폴트 메서드와 조상 클래스의 메서드 간의 충돌
--> 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.
3. 이해를 돕기위한 예제(1)
4. 이해를 돕기 위한 예제(2)
( 주의할 점은 두 인터페이스의 default 메서드들이 이름이 같다면, 구현하는 클래스에서는
무조건 구분지어 abstract 처럼 구현해주어야 한다. )
'자바 > 기본적인 개념' 카테고리의 다른 글
익명 클래스(anonymous class) (0) | 2021.12.16 |
---|---|
내부 클래스(inner class) (0) | 2021.12.10 |
인터페이스 다형성 (0) | 2021.12.08 |
인터페이스 (0) | 2021.12.08 |
추상 클래스(abstract class) (0) | 2021.12.07 |