public abstract int add(int a, int b);abstract 예약어를 반환형 앞에 붙인다.public static final이다.public abstract이다.public interface BInterface {
    void method1();
    void method2();
    void method4(int x);
}public interface CInterface {
    void method1();
    void method3();
    void method4(int x, int y);
}public class A implements BInterface, CInterface {
    void method1() {...}  // B,C 둘 중 어느 것을 가져와도 된다.
    void method2() {...}
    void method3() {...}
    void method4(int x) {...}  // from B
    void method4(int x, int y) {...}  // from C, overloading
}public interface Calculator {
    /*public static final*/ int ZERO = 0;
    /*public abstract*/ int calculate(int a, int b);
    void print();
}public interface AddCalculator implements Caculator {
    private int result;
    @Override
    public int calculate(int a, int b) {
        result = a + b;
        return result;
    }
    @Override
    public void print() {
        System.out.println("AddCalculator");
    }
}public interface EngineeringCalculator extends Calculator {
    double calculate(double a, double b);
}추상 메서드를 선언하여 상속을 통해 자식 클래스에서 완성하도록 유도하는 클래스
class 앞에 abstract 예약어 사용abstract을 붙여주어야 한다.public abstract class Calculator {
    protected int result;
    int calculate(int a, int b) {
        result = a + b;
        return result;
    }
    public abstract void print();
}public class SubtractCalculator extends Calculator {
    @Override
    int calculate(int a, int b) {
        return a - b;
    }
    @Override
    void print() {
        System.out.println("SubtractCalculator");
    }
}사용 의도
공통 기능 사용 여부