추상 메소드(abstract method)
- abstract 키워드를 사용해서 선언
- 선언되어 있으나 구현되어 있지 않은 메소드
- 서브 클래스에서 오버라이딩하여 구현해야함
추상 클래스(abstract class)
abstract class Shape {
public Shape() { }
public void paint() { draw(); }
abstract public void draw();
}
abstract class MyComponent {
String name;
public void load(String name) {
this.name = name;
}
}
- 추상 메소드를 하나라도 가진 클래스
- 추상 메소드가 하나도 없지만 abstract 로 선언된 클래스
<aside>
🌟 추상 클래스는 객체를 생성할 수 없다!
</aside>
추상 클래스의 상속
abstract class Shape { // 추상 클래스
public Shape() { }
public void paint() { draw(); }
abstract public void draw();
}
abstract class Line extends Shape { // 추상 클래스
public String toString () { return "Line";}
}
- 추상 클래스의 단순 상속
- 추상 클래스를 상속 받아, 추상 메소드를 구현하지 않으면 추상 클래스가 됨
- 서브 클래스도 abstract 로 선언해야함
- 추상 클래스의 구현 상속
- 서브 클래스에서 슈퍼 클래스의 추상 메소드 구현(오버라이딩)
- 서브 클래스는 추상 클래스가 아님

└ * 슈퍼 클래스에는 추상 메소드를 선언만 해두고 서브 클래스에서 구현
- 추상 클래스를 상속 받고 서브 클래스에서 추상 메소드를 구현(오버라이딩)했으므로 abstract 키워드로 선언 필요 ❌
- 서브 클래스에서 추상 메소드를 구현하지 않으려면 반드시 abstract 선언 필요
- ∴ 서브 클래스는 추상 클래스가 아니므로 객체 생성 가능 !
- 추상 클래스는 추상 메소드를 통해서 서브 클래스가 구현할 메소드를 명료하게 알려주는 인터페이스의 역할을 수행함
추상 클래스의 용도