[Java] 다형성 (2) (feat. 인터페이스)

SeongEon Kim·2022년 5월 4일
0

JAVA

목록 보기
31/52

하위 클래스를 인터페이스화 시킬 때, 그것의 데이터타입으로 상위클래스를 설정할 수 있다고 배웠다. 이와 마찬가지로 내가 만든 인터페이스가 있다고 가정하고, 그 인터페이스를 어떤 클래스가 구현했다고 보자. 그 클래스를 인스턴스화 시킬때 그 인스턴스화된 변수의 데이터타입으로 그 클래스가 구현한 인터페이스를 지정할 수 있다.

코드를 통해 자세히 알아보자.

package org.opentutorials.javatutorials.polymorphism;
interface I{}
class C implements I{}
public class PolymorphismDemo2 {
   public static void main(String[] args) {
       I obj = new C();
       // I라는 인터페이스를 구현한 클래스 C
       // 클래스 C를 인스턴스화 했을때의 데이터 타입이 I
   }
}

또 다른 코드를 보자.

package org.opentutorials.javatutorials.polymorphism;
interface I2{
    public String A();
}
interface I3{
    public String B();
}
class D implements I2, I3{
    public String A(){
        return "A";
    }
    public String B(){
        return "B";
    }
}
public class PolymorphismDemo3 {
    public static void main(String[] args) {
        D obj = new D();
        //클래스 D를 그대로 인스턴스의 데이터타입으로 사용
        //클랫 D가 정의하고 있는 모든 것을 호출 가능
        I2 objI2 = new D();
        // I2라는 인터페이스를 인스턴스의 데이터타입으로 사용
        I3 objI3 = new D();
        // I3이라는 인터페이스를 인스턴스의 데이터타입으로 사용
         
        obj.A();
        obj.B();
         
        objI2.A();
        //objI2.B();
        //메소드 B는 I2에서 정의하지 않으므로 오류 발생.
         
        //objI3.A();
        //메소드 A는 I3에서 정의하지 않으므로 오류 발생.
        objI3.B();
    }
}

I2는 메소드 A 정의, I3는 메소드 B 정의.

우리가 어떤 클래스를 사용할 때, 그 클래스에 속한 특정한 인터페이스의 기능만 사용하기를 원한다면 데이터타입으로 그 인터페이스를 정의하면 된다.

profile
꿈을 이루는 사람

0개의 댓글