들어가기 전에
지난 시간에 인터페이스에 대해서 알아 보았습니다.
이번에는 인터페이스에서 조금 더 나아가서 다형성에 대해서 알아보도록 합니다.
학습 목표
다형성이 무엇인지 알아봅니다.
핵심 단어
- 다형성(polymorphism)
강의 듣기
들어가기 전에
지난 시간에 인터페이스에 대해서 알아 보았습니다.
이번에는 인터페이스에서 조금 더 나아가서 다형성에 대해서 알아보도록 합니다.
학습 목표
다형성이 무엇인지 알아봅니다.
핵심 단어
강의 듣기
다형성
클래스의 인스턴스를 변수로 선언할 때, 해당 클래스의 데이터 타입으로 선언하지 않고
부모 클래스나 인터페이스를 데이터 타입으로 선언할 수도 있습니다.
이렇게 객체의 타입이 부모 클래스, 인터페이스, 자식 클래스 등 여러 형태인데도
인스턴스로 만든 객체(자식 클래스의 인스턴스)와 같이 행동하는 것을 다형성(polymorphism)이라고 합니다.
이번 시간에는 인터페이스를 통해 다형성을 알아봅니다.
interface Calculable {
double PI = 3.14;
int sum(int v1, int v2);
}
interface Printable {
void print();
}
class RealCal implements Calculable, Printable {
public int sum(int v1, int v2) {
return v1 + v2;
}
public void print() {
System.out.println("this is RealCal!!!");
}
}
public class InterfaceApp {
public static void main(String[] args) {
Calculable c = new RealCal();
System.out.println(c.sum(2, 1));
c.print(); // Compile Error
System.out.println(c.PI);
}
}
ReaCal 인스턴스를 Calculable 타입으로 선언하면, Printable 메소드를 사용할 수 없습니다.
반대로 Printable 타입으로 선언하면, Calculable 메소드를 사용할 수 없습니다.
생각해보기
1) 인터페이스로 변수를 선언했으면 메소드는 내용이 없는 껍데기에 불과할텐데 어떻게 작업을 수행할 수 있는 것일까요?
참고자료
https://docs.oracle.com
https://brunch.co.kr
comment
A a = new B();
A 메소드 기준으로 a가 생성된다.
뒤 B의 메소드 내 함수들은 무존재, 무기능으로 감쳐짐(=다형성)