- 선언되어 있으나 구현되어 있지 않은 메소드, abstract로 선언한다.
public abstract String getName(); public abstract void setName(String s);
- 추상 메소드는 서브 클래스에서 오버라이딩하여 구현해야 한다.
✅ 종류
1️⃣ 추상 메소드를 하나라도 가진 클래스(abstract 키워드 필수)
abstract class Shape { // 추상 클래스 선언 public Shape() {} public void paint() { draw(); } abstract public void draw(); // 추상 메소드 }2️⃣ 추상 메소드가 하나도 없지만 abstract로 선언된 클래스
abstract class MyComponent { // 추상 클래스 선언 String name; public void load(String name) { this.name = name; } }
✅ 상속
1️⃣ 추상 클래스의 단순 상속
- 추상 클래스를 상속받았으나 추상 메소드를 구현하지 않으면 추상 클래스 됨
- 서브 클래스도 abstract로 선언해야 함.
abstract class Shape { // 추상 클래스 public Shape() { } public void paint() { draw(); } abstract public void draw(); // 추상 메소드 } abstract class Line extends Shape { // 추상 클래스. draw()를 상속받고 구현X public String toString() { return "Line"; } }2️⃣ 추상 클래스 구현 상속
- 서브 클래스에서 슈퍼 클래스의 추상 메소드 구현(오버라이딩)
- 서브 클래스는 추상 클래스 아님
✅ 용도
1️⃣ 설계와 구현 분리
- 슈퍼 클래스에서는 개념 정의
- 서브 클래스마다 다른 구현이 필요한 메소드는 추상 메소드로 선언- 각 서브 클래스에서 구체적 행위 구현
- 서브 클래스마다 목적에 맞게 추상 메소드 다르게 구현2️⃣ 계층적 상속 관계를 갖는 클래스 구조를 만들때
글 잘 봤습니다.