1
2
3
4
| abstract public class Shape {
// 모양이 정해지지 않았기 때문에 면적 계산 불가
abstract public double getArea(); // 추상 메소드
}
추상 클래스- 클래스 정의에
abstract키워드 사용- 추상 메소드를 포함할 수 있음
- 데이터 필드나 일반 메소드를 포함할 수 있음
- 객체 생성을 할 수 없음
- 구체적이지 못한 불완전한 클래스라는 의미
ex) Shape이 추상 클래스라 가정 class="highlight"> 1
| Shape s = new Shape("red"); // 컴파일 오류 발생
추상 클래스의 사용- 의미적으로 유사한 클래스(자식 클래스)를 묶고자 할 때 사용
- 공통으로 사용할 데이터 필드와 메소드를 추상 클래스에서 정의
- 추상 클래스는 불완전한 클래스
- 추상 클래스는 자식 클래스로 상속되어 사용됨
- 자식 클래스에서 추상 메소드를 구현해야 함
- 그러면 자식 클래스는 객체 생성이 가능
- 자식 클래스가 추상 메소드를 구현하지 않으면 계속해서 자식 클래스도 추상 클래스이어야 함
- 추상 클래스는 일반 클래스와 인터페이스의 중간적 성격을 가짐
인터페이스- 100% 추상적 클래스
- 인터페이스의 모든 메소드가 추상 메소드(public abstract)
- 몸체 없이 구현되어야 할 메소드의 형식만 정의해 둠
- 단, default 인스턴스 메소드와
static메소드는 몸체를 구현함- 모든 메소드의 기본 접근 제어자는
public
- 데이터 필드는 클래스 상수만 가능
- 참조형이며 직접적 객체 생성 불가
- 인터페이스의 이름은 보통 형용사
RunnableSerializableComparable
인터페이스의 정의- 문법은 클래스 정의와 유사함
- 정의할 때 키워드 class 대신에 interface를 사용
- 메소드의 접근 제어자는 기본적으로(생략하더라도)
public abstract임- 몸체가 없으며, 반환형, 이름, 매개변수 목록만 표시
- default 인스턴트 메소드와
static메소드도 가능- 이 경우 몸체 구현해야 함
- 기본적으로(생략하더라도) 접근 제어자는
public임
- 데이터 필드는 항상(생략 가능)
public static final임
인터페이스의 사용- 추상 클래스와 마찬가지로 자식 클래스에 상속(구현)되어 사용됨
- 인터페이스를 상속(부모 인터페이스를 구현)받은 자식 클래스는 모든 추상 메소드를 구현해주어야함
- 의미적으로는 관련이 없으나 기능적으로 유사한 클래스들을 묶을 때 인터페이스를 사용할 수 있음
- ex) 대소 비교가 가능한 클래스(사각형, 사람…)
- 인터페이스를 상속 받아 자식 인터페이스를 정의할 수 있음
class="highlight"> 1
2
3
4
| interface Comparable<T> {
//다른 객체와 크기를 비교하는 메서드
boolean isLargerThan(T o);
}
class="highlight"> 1
2
3
4
5
6
7
| class Box implements Comparable<Box> {
private int length, width, height;
public boolean isLargerThan(Box otherBox) {
}
}
인터페이스의 상속- 자식 인터페이스가 부모 인터페이스를 상속 받는 경우
|
|
|
|