[Java] 추상클래스
2024. 5. 10. 18:04ㆍBackend/Java
728x90
🎯 추상클래스
1.1 추상클래스(abstract class)
- 클래스가 설계도라면 추상클래스는 미완성 설계도
- 추상메서드를 포함하고 있는 클래스
- 일반메서드가 추상메서드를 호출할 수 있다(호출 시 필요한 건 선언부)
- 완성된 설계도가 아니라 인스턴스 생성 불가능
- 다른 클래스를 작성하는 데 도움을 줄 목적으로 작성.
1.2 추상메서드(abstract method)
- 선언부만 있고 구현부(몸통)가 없는 메서드
- 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우에 사용
- 추상클래스를 상속받는 자손클래스에서 추상메서드의 구현부를 완성해야 한다.
1.3 추상클래스 예제
abstract class Unit { // 추상클래스
int x, y;
abstract void move(int x, int y); // 추상메서드
void stop() { /* 현재 위치에 정지 */ }
}
class Marine extends Unit {
void move(int x, int y) { // 상속받은 클래스에서 추상메서드를 완성해줘야함
System.out.println("Marine위치: "+ x + ", " + y);
}
}
class Tank extends Unit {
int x, y;
void move(int x, int y) {
System.out.println("Tank위치: "+ x + ", " + y);
}
}
class Dropship extends Unit{
void move(int x, int y) {
System.out.println("Dropship위치: "+ x + ", " + y);
}
}
public class Test {
public static void main(String[] args) {
Unit[] group = new Unit[3];
group[0] = new Marine();
group[1] = new Tank();
group[2] = new Dropship();
for (int i = 0; i < group.length; i++) {
group[i].move(100, 200);
}
}
}
실행결과
Marine위치: 100, 200
Tank위치: 100, 200
Dropship위치: 100, 200
참조변수 배열을 통해서 서로 다른 종류의 인스턴스를 하나의 묶음으로 다룰 수 있음.
stop() 메서드는 선언부와 구현부 모두 공통적이지만 공중유닛과 지상유닛으로 구분한다면 이동하는 방법이 달라
move() 메서드의 내용이 각각 달라질 수 있다.
이처럼 자기의 클래스의 알맞게 구현해야 하는 경우 추상클래스와 추상메서드를 적절히 사용하면 될 것 같다.
'Backend > Java' 카테고리의 다른 글
| [Java] 내부클래스 (0) | 2024.05.10 |
|---|---|
| [Java] 인터페이스 (0) | 2024.05.10 |
| [Java] 다형성 (0) | 2024.05.10 |
| [Java] 오버로딩 (0) | 2024.05.09 |
| [Java] 상속 (0) | 2024.05.09 |