참조 변수의 형변환과 instanceof 연산자

‍김다솔·2021년 4월 14일

참조 변수의 형변환

FireEngine f = new FireEngine();
		
Car c = (Car)f; // 조상 = 자손 : 생략 가능, 사용할 수 있는 멤버가 줄어듦
FireEngine f2 = (FireEngine)c; // 자손 = 조상 : 생략 불가, 멤버가 늘어남
Ambulance a = (Ambulance)f; // ERROR: 형제 관계
  • 사용할 수 있는 멤버의 개수를 조절 ( 리모컨 변경 )
  • 조상, 자손 관계의 참조 변수는 서로 형변환 가능, 형제 관계는 형변환 불가
  • 형변환 해도 타입만 바뀌고 객체와 주소는 그대로
Car c = new Car();
FIreEngine fe = (FireEngine);c // 형변환 실행 에러 : java.lang.ClassCastException, 객체에 water() 없음
fe.water(); // 컴파일 OK
  • 참조변수가 가리키는 실제 객체의 멤버 개수를 넘지 않는 게 중요

instanceof 연산자

if (c instanceof FireEngine) {
	FireEngine fe = (FireEngine)c;
    fe.water();
}
// fe는 Object, Car, FireEngine 타입으로 형변환 가능
System.out.println(fe instanceof Object);
System.out.println(fe instanceof Car);
System.out.println(fe instanceof FireEngine);
  • 참조변수 형변환 가능여부 확인에 사용, 가능하면 true 반환
  • 형변환 전에 반드시 instanceof로 확인해야 함
profile
💻🎧⚽

0개의 댓글