1. 추상 클래스
- 클래스가 설계도라면 추상 클래스는 미완성 설계도
- 추상메서드를 포함하고 있는 클래스
- 인스턴스 생성 불가능
- 다른 클래스를 작성하는 데 도움을 줄 목적으로 작성된다.
- 여러 클래스에 공통적으로 사용될 수 이쓴ㄴ 추상 클래스를 바로 작성하거나 기존 클래스의 공통 부분을 뽑아 만든다.
2. 추상 메서드
- 선언부만 있고 구현부가 없는 메서드
- 일반 메서드가 추상메서드를 호출할 수 있다.
- 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우에 사용
- 추상클래스를 상속받는 자손클래스에서 추상메서드의 구현부를 완성해야 한다.
3. 인터페이스
- 일종의 추상클래스 (추상클래스 보다 추상화 정도가 높다.)
- 실제 구현된 것이 전혀 없는 기본 설계도
- 추상 메서드와 상수만을 멤버로 가질 수 있다. (8버전 부터는 디폴트 메서드 추가 가능)
- 인스턴스를 생성할 수 없고 클래스 작성에 도움을 줄 목적으로 사용된다.
- 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는 데 사용된다.
- 다중 상속이 허용된다.
모든 멤버변수는 public static final이 생략되어 붙는다.
모든 메서드는 public abstarct가 생략되어 붙는다.
다형성
- 인스턴스 타입의 변수로 인터페이스를 구현한 클래스의 인스턴스를 참조할 수 있다.
- 인터페이스를 메서드의 매개변수 타입으로 지정할 수 있다.
- 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 사용한다.
- 인터페이스를 메서드의 리턴타입으로 지정할 수 있다.
- 인터페이스를 구현한 클래스의 인스턴스를 반환한다.
interface Repairable {}
class GroundUnit extends Unit {
GroundUnit(int hp) {
super(hp);
}
}
class Unit {
int hitPoint;
final int MAX_HP;
Unit(int hp) {
MAX_HP = hp;
}
}
class Tank extends GroundUnit implements Repairable {
Tank() {
super(150);
hitPoint = MAX_HP;
}
public String toString() {
return "Tank";
}
//...
}
class Marine extends GroundUnit {
Marine() {
super(40);
hitPoint = MAX_HP;
}
//...
}
class SCV extends GroundUnit implements Repairable{
SCV() {
super(60);
hitPoint = MAX_HP;
}
void repair(Repairable r) {
if (r instanceof Unit) {
Unit u = (Unit)r;
while(u.hitPoint!=u.MAX_HP) {
u.hitPoint++;
}
}
}
class RepairableTest{
public static void main(String[] args) {
Tank tank = new Tank();
Marine marine = new Marine();
SCV scv = new SCV();
scv.repair(tank);
scv.repair(dropship);
// scv.repair(marine); marine 클래스는 repairable 인터페이스를 구현하지 않아 사용불가
}
}
추상 클래스와 인터페이스의 차이점
8버전 이후 인터페이스 또한 구현된 메소드를 가질 수 있다. 기능은 비슷한 반면 필요에 의해 둘을 구분해서 사용한다.
인터페이스 | 추상 클래스 | |
public 이외의 다른 접근 제어자가 필요할 때 | o | |
다중 상속이 필요할 때 | o | |
관련성이 높은 클래스 간에 코드를 공유할 때 | o |
자바의 정석 7장
'Java > 개념정리' 카테고리의 다른 글
POJO (0) | 2020.08.26 |
---|---|
객체지향개념(3)_제어자, 다형성 (0) | 2020.08.21 |
객체지향개념(2)_상속, 포함, 오버라이딩, super (0) | 2020.08.20 |
객체지향개념(1)_클래스, 변수, 메서드, 생성자 (0) | 2020.08.19 |
자바 메인 동작원리(이미지) (0) | 2020.08.06 |