- Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
- Section 1. 자바의 핵심 - 객체지향 프로그래밍
- 28강 "인터페이스 선언과 구현하기(1)"
- 인터페이스(interface) > 클래스에서 인터페이스 구현하기 > 인터페이스 구현과 형변환
public interface Calc {
double PI = 3.14;
int ERROR = -999999999;
int add(int num1, int num2);
int substract(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
}
interface 클래스는 컴파일 과정에서 변수는 상수(public static final)로, 메서드는 추상 메서드(public abstract)로 자동으로 변환된다.
public abstract class Calculator implements Calc{
@Override
public int add(int num1, int num2) {
return num1 + num2;
}
@Override
public int substract(int num1, int num2) {
return num1 - num2;
}
}
public class CompleteCalc extends Calculator{
@Override
public int times(int num1, int num2) {
return num1 * num2;
}
@Override
public int divide(int num1, int num2) {
if(num2 != 0) {
return num1 / num2;
}
return ERROR;
}
public void showInfo() {
System.out.println("Calc 인터페이스를 구현하였습니다.");
}
}
interface implements 는 type 상속, class extends 는 구현 상속이라고 한다.
implements도 상속이기 때문에 아래와 같은 코드가 가능하다.
Calc calc = new CompleteCalc();
가장 하위 클래스인 CompleteCalc의 인스턴스를 생성해서 가장 상위 클래스인 인터페이스 타입으로 선언할 수 있다.
Calc 타입이기 때문에 CompleteCalc 클래스에 선언한 showInfo() 메서드는 사용할 수 없다.
(사용하기 위해서는 다운캐스팅 해야함)
interface와 abstract 클래스는 인스턴스를 생성할 수 없다.
Calc calc1 = new Calc(); //불가
Calc calc2 = new Calculator(); //불가