앞서 형변환에 대해 알아봤었다.
기본형뿐만 아니라 Class 도 형변환이 가능하다.
https://standout.tistory.com/67
여기서 주의할 점은,
부모 클래스를 자식 클래스로 형변환하는 것은 불가능하다.
한 백화점이 고객관리를 하는데
VIP고객은 고객 안에 속해있지만
고객이 다 VIP고객이 될 순 없는것 처럼 예외가 존재한다는 것.
public class Customer {
private String name;
private String email;
public Customer(String name, String email) {
this.name = name;
this.email = email;
}
// getters and setters
// ...
}
public class VIPCustomer extends Customer {
private int vipLevel;
public VIPCustomer(String name, String email, int vipLevel) {
super(name, email);
this.vipLevel = vipLevel;
}
// getters and setters
// ...
}
Customer customer1 = new Customer("Alice", "alice@example.com");
VIPCustomer vipCustomer1 = new VIPCustomer("Bob", "bob@example.com", 2);
// Customer 객체를 VIPCustomer 객체로 형변환
VIPCustomer vipCustomer2 = (VIPCustomer) customer1;
// VIPCustomer 객체를 Customer 객체로 형변환
Customer customer2 = vipCustomer1;
앞서 배운것처럼
Class 형변환에서도 묵시적, 명시적 형변환이 일어난다.
(VIPCustomer)와 같이 캐스트 연산자를 사용하여
코드 외관상으로는 문제가 없을 수 있으나
이는 불가능하여 위 코드에서는 ClassCastException이 발생하게된다.
'JAVA' 카테고리의 다른 글
상속받다, implements (0) | 2023.03.16 |
---|---|
덮어쓰는 annotation, @Override (0) | 2023.03.16 |
this 와 super (0) | 2023.03.16 |
상속받다, extends (0) | 2023.03.16 |
날짜형식 정하기, SimpleDateFormat() (0) | 2023.03.16 |