객체 지향 프로그래밍 - 인터페이스

타입 변환(인터페이스)

한모로그 2023. 1. 21. 12:53

자동 타입 변환

  • 자동으로 타입 변환이 일어나는 것


    출처, 이것이 자바다


  • 부모 클래스가 인터페이스를 구현하고 있다면 자식 클래스도 인터페이스 타입으로 자동 타입 변환될 수 있음


    출처, 이것이 자바다


package ch08.sec10.exam01;

public interface A {

}

package ch08.sec10.exam01;

//구현 클래스
public class B implements A {

}

package ch08.sec10.exam01;

//구현 클래스
public class C implements A {

}

package ch08.sec10.exam01;

//자식 클래스
public class D extends B {

}

package ch08.sec10.exam01;

//자식 클래스
public class E extends C {

}

package ch08.sec10.exam01;

public class PromotionExample {

    public static void main(String[] args) {
        //구현 객체 생성
        B b = new B();
        C c = new C();
        D d = new D();
        E e = new E();

        //인터페이스 변수 선언
        A a;

        //변수에 구현 객체 대입. 자동형변환
        a = b; //A <- B 자동 타입 변환
        a = c; //A <- C 자동 타입 변환
        a = d; //A <- D 자동 타입 변환
        a = e; //A <- E 자동 타입 변환
    }

}

강제 타입 변환

  • 캐스팅 기호를 사용해서 인터페이스 타입을 구현 클래스 타입으로 변환시키는 것


    출처, 이것이 자바다


  • 구현 객체가 인터페이스 타입으로 자동 변환되면, 인터페이스에 선언된 메소드만 사용 가능


    출처, 이것이 자바다


package ch08.sec10.exam02;
//부모 인터페이스
public interface Vehicle {
    //추상 메소드
    void run();
}

package ch08.sec10.exam02;
//구현 클래스
public class Bus implements Vehicle {
    //추상 메소드 재정의
    @Override
    public void run() {
        System.out.println("버스가 달립니다.");

    }

    //추가 메소드
    public void checkFare() {
        System.out.println("승차요금을 체크합니다.");
    }

}

package ch08.sec10.exam02;

public class CastingExample {

    public static void main(String[] args) {
        //인터페이스 변수 선언과 구현 객체 대입. 자동 형변환
        Vehicle vehicle = new Bus(); 

        //인터페이스를 통해서 호출
        vehicle.run(); //재정의된 메소드
        //vehicle.checkFare(); //호출 불가능

        //강제 타입 변환 후 호출. 강제 형변환
        Bus bus = (Bus) vehicle;
        bus.run();
        bus.checkFare();

    }

}