상속
extends 키워들를 사용해 하위 클래스에서 상위 클래스의 모든 멤버를 사용할 수 있도록 한다. 자식은 여럿이 될 수 있지만 부모는 단 하나.
class 하위클래스 extends 상위클래스 { ... }
+ 하위 클래스 실행 시 상위 클래스의 인스턴스가 먼저 생성된다. = 상위 클래스의 생성자가 먼저 호출되고, 하위 클래스의 생성자가 호출된다.
추상 클래스
한 개 이상의 추상 메서드를 가지는 클래스로 abstract 키워드로 나타낸다. 상위 클래스로 사용될 수 있지만 자신의 인스턴스를 만들 수는 없다. 추상 클래스를 상위 클래스로 상속받은 하위 클래스는 반드시 추상 클래스의 모든 추상 메서드를 구현해야 한다.
abstract class 클래스 {
abstract void method();
}
인터페이스
상수(static final)와 abstract, (default, static → java 8부터) 메서드만으로 이루어진다. 클래스에서 implements 키워드를 사용해 인터페이스를 구현할 수 있다. 인터페이스를 구현하는 클래스는 반드시 모든 추상 메서드를 구현해야 한다.
인터페이스를 사용하는 이유 → 하나의 인터페이스를 여러 클래스가 구현할 수 있다.
e.g. List 인터페이스를 ArrayList와 LinkedList 클래스가 구현한다.
abstract 메서드
바디를 가지지 않는 구현되지 않은 메서드로, 인터페이스를 구현하는 클래스에서 반드시 구현해주어야 한다.
default 메서드
인터페이스에서 default 메서드를 자체적으로 구현하는 것이 가능하다. 해당 인터페이스를 구현하는 클래스에서 default 메서드를 그대로 사용하거나 오버라이딩해 사용할 수 있다. 여기서 default는 접근 제한을 나타내지 않는다.
→ 인터페이스에 default로 메서드를 구현해 놓음으로서 인터페이스가 변경이 되어도 클래스에서 default 메서드를 구현할 필요가 없음.
static 메서드
인터페이스에서 구현한 static 메서드는 인터페이스명.메서드명() 형식으로 호출한다.
+) default vs. static 메서드
default 메서드
메서드를 구현하는 클래스의 인스턴스로 접근이 가능하다. → 클래스명.메서드명()
인터페이스를 구현하는 클래스에서 오버라이딩이 가능하다.
static 메서드
인터페이스와 함께 메모리에 로드되므로 인터페이스를 통해 접근한다. → 인터페이스명.메서드명()
인터페이스를 구현하는 클래스에서 오버라이딩할 수 없다.
* 헷갈렸던 것
클래스가 인터페이스를 구현한다는 것은 인터페이스의 모든 추상 메서드를 구현한다는 것을 의미한다. 하지만 인터페이스를 구현하는 모든 클래스들이 같은 멤버로 구성된다는 것을 의미하는 것은 아니다. 클래스는 여러 인터페이스들을 구현하는 것이 가능하고, 인터페이스를 구현하는 클래스에 클래스 멤버가 추가되는 것이 허용되기 때문이다.
++)
스프링 하다가 멘붕 와서 정리
'diary > byromself' 카테고리의 다른 글
intellij/ resource bundle editor 적용으로 메시지 쉽게 적용하기 (0) | 2022.07.13 |
---|---|
intellij/ 인텔리제이 코드 자동 줄바꿈(Soft Wraps) 설정하기 (0) | 2022.07.11 |
06/03/22 java/ break문과 continue문 (0) | 2022.06.03 |
06/01/22 java/ int끼리 나누면 결과는 int로만 나온다 소수점 x (0) | 2022.06.01 |
05/06/22 [Github] 잔디 심기 더 이상 미룰 수 없다 (0) | 2022.05.06 |