: 상속 클래스를 만들어, 그 클래스를 사용하도록 강제함
문법
- 상속 클래스 없을 때 오류
abstract class A{
public abstract int b();
public void d() {
System.out.println("world");
}
}
public class AbstractDemo {
public static void main(String[] args) { A obj = new A();
}
}
- 상속 but 메소드 오버라이딩 x
abstract class A{
public abstract int b(); => 메소드의 구체적 로직을 담는 본체 없고, 메소드에 대한 시그니처만 갖고 있는 추상적인 모습 => 반드시 메소드를 오버라이딩해야 함
public void d() {
System.out.println("world");
}
} class B extends A {}
public class AbstractDemo {
public static void main(String[] args) {
B obj = new B();
}
}
- abstract 메소드 오버라이딩
abstract class A{ //메소드 중 하나라도 abstract면 그 클래스는 abstract 클래스
public abstract int b(); //본체 있는 메소드는 abstract 키워드 사용 불가 ex. public abstract int c(){System.out.println("hi")}
public void d() { //추상 클래스 내에는 추상메소드가 아닌 메소드도 존재할 수 있음
System.out.println("world");
}
}
class B extends A {
public int b() {
return 1;
}
}
public class AbstractDemo {
public static void main(String[] args) {
B obj = new B();
}
}
=> 구체적인 구현은 사용자에게 넘기는 것
사용 이유
부모 클래스 내 메소드의 시그니처만 정의하고, 그 메소드의 실제 동작 방법은 하위 클래스의 책임으로 위임함
=> 큰 프로젝트에서 사용됨
- 계산기 예제 활용
- 중복 제거
int _sum(){
return this.left + this.right;
}
디자인 패턴
template method pattern
'Programming > 자바' 카테고리의 다른 글
생활코딩 자바 - 인터페이스 (0) | 2022.04.08 |
---|---|
생활코딩 자바 - final (0) | 2022.04.08 |
생활코딩 자바 - 접근제어자 (0) | 2022.04.07 |
생활코딩 자바 - API (0) | 2022.04.07 |
생활코딩 자바 - 패키지 ?? (0) | 2022.04.07 |