BackEnd/Java

[Java] 상속 자동 타입 변환&강제 타입 변환 / 업캐스팅&다운캐스팅 + instanceof

Cune 2021. 12. 16. 22:48

 

 

자동 타입 변환  = 업캐스팅

Parent p = new Child();

 

자식타입-> 부모타입으로 변환시키는 것이다.

바로위의 부모가 아니더라도 상속계층 상위에 있다면 타입 변환이 가능하다.

자동타입 변환 이후 부모 필드와 메소드만 접근가능하다. 

오버라이딩 된 부모클래스는 자식클래스 메소드가 대신 호출

 

public class Driver{
	void drive(Vehicle vehicle){	//맨아랫줄에서 매개변수 자녀클래스 자동타입변환
    
		vehicle.run();
	}
}

////////////////////////////////////////////////////

public class Bus extends Vehicle{
	@Override
	public void run(){
		System.out.println("버스가 달립니다");
	}
}

////////////////////////////////////////////////////

public class DriverExample {
	public static void main(String[] args){
 	
    	Driver driver = new Driver();
        
        Bus bus new Bus();
        
		driver.drive(bus);	//자동 타입 변환 : Vehicle vehicle = bus;
    }
}

 


강제 타입 변환 = 다운캐스팅

Parent p = new Child();
Child c = (Child)p;

 

자동 타입 변환으로 자식타입 -> 부모타입 변환 후

다시 부모타입 -> 자식타입으로 변환 할 때 사용한다.

부모 필드,메소드가 아닌 자식 타입에 선언된 필드, 메소드를 사용할 경우 사용한다.

(부모타입으로 변경하면 자식 타입에 따로 생성된 필드나 메소드를 사용할 수 없기 때문)


객체 타입 확인 (instanceof)

boolean result =  p instanceof Child

자식타입 -> 부모타입 변환했을 때

부모변수 참조 객체 타입 == 자식객체 확인하기 위해 사용한다.