1. class 앞에 키워드 'abstract'를 붙여 사용
2. 여러 클래스에서 공통적으로 사용하는 부분을 추상클래스로 만들어 상속을 통해 사용
3. 추상 메서드 앞에는 abstract 붙여서 사용
public abstract class Car {
// abstract 리턴타입 메서드이름();
abstract String getName();
// 일반 메서드 작성 가능
double getChargeQuantity(){
return getTripDistance() / getDistancePerLiter();
}
}
1. 인터페이스는 일종의 추상클래스.
2. 인터페이스의 추상화의 정도가 추상클래스보다 높기 때문에 추상 클래스에서 가지던 멤버변수와 일반 메서드를 구성원으로 가질 수 없음.(JDK 1.8이후 default 메서드 예외)
3. 오버라이딩시 public으로 선언해야함(보통 인터페이스에서 public abstract를 생략하고 사용함)
4. 여러개의 인터페이스로부터 다중 상속을 받는 것이 가능하다.
public interface Car {
//추상메서드. public abstract 생략되어 있음
String getName();
double getChargeQuantity();
//JDK1.8부터 사용가능한 default메서드를 통한 메서드 구현
default double getChargeQuantity(){
return getTripDistance() / getDistancePerLiter();
}
}
결론
추상클래스와 인터페이스 모두 '추상화'라는 작업을 위해 사용함.
일부 구현 메서드가 필요할 시 추상클래스를 사용하는게 유리하였으나 JDK1.8버전 이후로는 interface에서도 구현메서드 사용 가능.
여러 클래스를 만들었는데 클래스들의 행위/역할이 겹친다? 라는 생각이 들면 주저없이 interface 나 추상클래스의 사용을 고려해보자.
[JAVA] Optional : orElse, orElseThrow, orElseGet (1) | 2023.04.20 |
---|---|
[JAVA] Call by Value , Call by Reference의 차이와 heap & stack 관점에서의 이해 (0) | 2022.12.01 |
인스턴스 멤버와 정적멤버 (0) | 2022.05.12 |
댓글 영역