객체 지향 프로그래밍 - 인터페이스
타입 변환(인터페이스)
한모로그
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();
}
}