TIL | JAVA 참조변수의 형변환

김윤희·2022년 8월 1일
0

참조변수의 형변환

참조변수의 형변환(1)


  • 사용할 수 있는 멤버의 개수를 조절하는 것
    • 예를 들어 기본형의 형변환은 3.6 -> int ->3(값이 바뀐다)
      ✔ 하지만 참조변수의 형변환은 값이 달라지는게 아니라 개수가 달라진다
  • 조상 자손 관계의 참조변수는 서로 형변환 가능
    • 하지만 형제들끼리는 안된다
//예를들어 Car의 자손인 FireEngine 과 Ambulance이 있다고 가정하자
FireEngine f = new FireEngine();	
Car c = (Car)f;					//OK. 조상인 car타입으로 형변환 (생략가능)		
FireEngine f2 = (FireEngine)c;	//OK. 자손인 FireEngine타입으로 형변환 (생략불가)
Ambulance a= (Ambulance)f;		//에러! 상속관계가 아닌 클래스 간의 형변환 불가!
class Car{
	String color;
    int door;
    
    void drive(){	// 운전하는 기능
    	System.out.println("drive!");
    }
    
    void stop(){	// 운전하는 기능
    	System.out.println("stop!");
    }
}

class FireEngine extends Car{
	void water(){
    	System.out.println("water!");
    }
}

📝예제

class Ex{
	public static void main(String args[]){
    	Car car = null;
        FireEngine fe = new FireEngine();
        FireEngine fe2 = null;
        
        fe.water();
        car = fe;	// car (car)fe;에서 형변환이 생략됨
      //  car.water();    -> 컴파이 에러! Car 타입의 참조변수로는 water()를 호출할 수 없다
        fe2 = (FireEngine)car;	//자손타입 <- 조상타입 형변환 생략불가
        fe2.water();
      
    }
}

자손(멤버 5개) -> 조상(멤버 4개) 이렇게 감소 시키키는 건 안전하지만,
조상(멤버 4개) -> 자손(멤버 5개) 증가 를 시키는 건 안전하지 않다(왜냐하면 실제 참조변수가 가르키는 객체가 뭔지 모르기 때문에)
❗ 전하지 않은 변환이기 때문에 형변환을 꼭! 써주라고 생략 불가이다!!

0개의 댓글