📝 추상 클래스 (abstract class)
- 클래스를 설계도에 비유한다면, 추상 클래스는 미완성 설계도에 비유할 수 있다.
- 추상 클래스는 객체를 생성할 수 없고, 반드시 상속을 통해서만 사용될 수 있다.
- 추상 메서드를 하나 이상 포함하고 있는 클래스는 반드시 '추상 클래스'로
정의되어야 한다.- 추상 클래스는 다른 자식 클래스를 위한 '가이드라인'의 역할을 한다.
public abstract class Hello{
// 멤버변수
// 생성자
// 일반 메서드
// 추상 메서드
...
}
📝 추상 메서드 (abstract method)
- 추상 클래스에서만 선언할 수 있다.
- 메서드의 선언부만 있고 구현부가 없는 '미완성 메서드'이다.
- 추상 메서드는 자식 클래스가 구현해야 하는 메서드의 가이드라인만
제시하기 위한 목적으로 사용된다.
public abstract void sayHello();
✍ 코드 예시
// 육군 / 해군 / 공군 의 공통 기능을 명시하기 위한 부모 클래스
public abstract class Unit {
private String name;
public Unit(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 자식들이 재정의할 메서드를 추상으로 명시
public abstract void attack();
public abstract void move();
}
// 자식 클래스
// 육군
public class Army extends Unit {
public Army(String name) {
super(name);
}
// 추상 메서드의 재정의를 요구한다.
@Override
public void attack() {
System.out.println(this.getName() + ">> 육상공격");
}
@Override
public void move() {
System.out.println(this.getName() + ">> 육상이동");
}
}
// 해군
public class Navy extends Unit {
public Navy(String name) {
super(name);
}
@Override
public void attack() {
System.out.println(this.getName() + ">> 해안공격");
}
@Override
public void move() {
System.out.println(this.getName() + ">> 해안이동");
}
}
// 공군
public class AirForce extends Unit {
public AirForce(String name) {
super(name);
}
@Override
public void attack() {
System.out.println(this.getName() + ">> 공중공격");
}
@Override
public void move() {
System.out.println(this.getName() + ">> 공중이동");
}
}
// Main 클래스
public class Main {
public static void main(String[] args) {
Unit[] u = new Unit[3];
u[0] = new Army("육군");
u[1] = new Navy("해군");
u[2] = new AirForce("공군");
for (int i = 0; i < u.length; i++) {
u[i].attack();
u[i].move();
System.out.println("------------------------------------------");
}
}
}
👉 실행 결과
육군>> 육상공격
육군>> 육상이동
------------------------------------------
해군>> 해안공격
해군>> 해안이동
------------------------------------------
공군>> 공중공격
공군>> 공중이동
------------------------------------------