강의 내용
[1] 부모와 자식간의 형 변환
[2] UpCasting과 DownCasting
[1] 부모와 자식간의 형 변환
형 변환
(1) 기본 자료형(PDT) 형 변환
int a = (int) x;
(2) 클래스 형 변환
A a = new A(); // 타입 일치
B b = new A(); // 타입 불일치(상속 관계)
B b = new A();
사용자는 B 클래스를 통해 A 클래스를 동작시킬 수 있다.
(1) A 클래스와 B 클래스가 상속 관계여야 함
(2) B 클래스의 특정 동작이 A 클래스에 재정의 되어야 함
*A : 자식 클래스, B : 부모 클래스
*B : 사용자와 A 사이의 인터페이스 역할(User → B → A.class)
자식 → 부모(UpCasting, 자동 형 변환)
부모(1) : 자식(n)
여러 자식들은 하나의 부모에 들어감
자식(작은 타입) - 부모(큰 타입) : 자식들이 부모에게 갈 때는 자동으로 들어갈 수 있음
부모 - 자식A
- 자식B
- 자식C
p(부모) = new 자식A();
p(부모) = new 자식B();
p(부모) = new 자식C();
부모 → 자식(DownCasting, 강제 형 변환)
자식(n) : 부모(1)
부모는 여러 명의 자식을 가리킴
부모(큰 타입) - 자식(작은 타입) : 부모가 자식에게 갈 때는 어떤 자식의 타입으로 바꿀 건지를 정확히 알아야 함
UpCasting이 되어야 DownCasting이 된다.
자식A - 부모
자식B -
자식C -
c(자식A) = (자식A)부모;
c(자식B) = (자식B)부모;
c(자식C) = (자식C)부모;
Q. Dog와 Cat 클래스를 설계하고 동작시켜 보시오.
public class ObjectCastingTest { public static void main(String[] args) { // Animal ---> Dog, Cat // eat() : 부모가 자식에게 동일한 메세지를 보냄("먹어라") Animal ani = new Dog(); ani.eat(); // Dog에게 메세지를 보냄(명령) -> 개처럼 먹다(반응) ani = new Cat(); // UpCasting ani.eat(); // Cat에게 메세지를 보냄(명령) -> 고양이처럼 먹다(반응) // ani.night(); // DownCasting } }
[2] UpCasting과 DownCasting
상속 관계에서 객체를 생성하는 방법
Upcasting : 자식 클래스의 타입을 부모 타입으로 받는 것(자동)
Downcasting : 부모 클래스의 타입을 자식 클래스의 타입으로 바꾸는 것(강제)
Q. Dog와 Cat 클래스를 설계하고 동작시켜 보시오.
Cat c = x;
(Cat)가 없으면 x가 어떤 타입인지 알 수 없음(Cat? Dog?)
Cat c = (Cat)x;
x라는 부모 타입을 Cat 타입으로 형을 바꿔서 Cat 타입으로 받아야 함
public class ObjectCastingTest { public static void main(String[] args) { // Animal ---> Dog, Cat // eat() : 부모가 자식에게 동일한 메세지를 보냄("먹어라") Animal ani = new Dog(); ani.eat(); // Dog에게 메세지를 보냄(명령) -> 개처럼 먹다(반응) ani = new Cat(); // UpCasting ani.eat(); // Cat에게 메세지를 보냄(명령) -> 고양이처럼 먹다(반응) // Cat c = (Cat)ani; // c.night(); // DownCasting ((Cat)ani).night(); // DownCasting : 한 줄로 표현 } }
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.