추상클래스는 상속을 강제하며, 자식클래스에서 공통적으로 사용될 로직을 추상클래스에서 구현하여, 중복로직을 제거한다.

그외, 시그니처만 정의해 놓고 실제구현은 상속받은 자식클래스에서 반드시 구현하도록 강제한다.

예를들어 다음 Calculator 추상클래스는 sum 기능을 반드시 구현되어야 될 메소드 시그니처이고, print메소드는 공통로직이다.


그럼 추상클래스 tutorial을 통해 구현해보자..


package com.test;

//추상클래스
abstract class Calculator {

	//공통로직
	public void print(int result) {
		System.out.print("결과는? " + result + "\n");
	}

	//반드시 자식클래스에서 구현되어야 될 메소드
	public abstract int sum(int a, int b);
}

//자식클래스1
class CalculatorDemo1 extends Calculator {

	@Override
	public int sum(int a, int b) {
		return a + b;
	}
}

//자식클래스2
class CalculatorDemo2 extends Calculator {

	@Override
	public int sum(int a, int b) {
		return (a*2) + (b*2);
	}
}

//실행로직
public class AbstractTutorial {

	public static void main(String[] args) {
		int result;

		//구현부1 실행
		CalculatorDemo1 cal1 = new CalculatorDemo1();
		result = cal1.sum(10, 20);
		cal1.print(result);

		//구현부2 실행
		CalculatorDemo2 cal2 = new CalculatorDemo2();
		result = cal2.sum(10, 20);
		cal2.print(result);
	}
}


결과)


결과는? 30

결과는? 60