아래 코드처럼 인터페이스 Lockable 형 변수 lock에 포조(POJO) 클래스 User를 할당하면 컴파일 할 때 에러가 발생할까요?
public class User {
…
}
public interface Lockable {
…
}
User user = …;
Lockable lock = (Lockable) user;
에러가 발생하지 않습니다.
JLS(Java Language Specification)에 따르면, 좌변(Lockable)이 인터페이스이고 우변(User)이 클래스일 때 우변(User)이 final 이 아니고 템플릿 파라미터가 다른 제네릭이 아니라면, 컴파일 시에는 허용한다고 합니다.
우변(User)의 서브 클래스가 좌변을(Lockable)을 구현하면 위 캐스팅은 올바르기 때문입니다.
public class Student extends User implements Lockable {
…
}
User user = new Student();
Lockable lock = (Lockable) user;
믹스인(Mixin)을 공부하며 덤으로 얻은 지식! ^^
