본문 바로가기
언어/JAVA

JAVA 캐스팅, 업캐스팅, 다운캐스팅

by tovantablack 2020. 8. 15.
728x90
728x90

캐스팅 = 형변환

캐스팅 casting : 데이터 손실을 막기 위해 다형성을 지켜주는 것

ex) int에 float을 넣으면 소수점 뒷자리가 날라가버림 => 데이터 손실 -> 방지위해 캐스팅: int a = (int)1.0;

그래서 큰 거에 작은 걸 넣을 때는 안 해줘도 자동으로 캐스팅이 되는 것!

 

 

업 캐스팅 upcasting : 자식클래스가 부모클래스가 되는 것(이때 자식 클래스의 인스턴스는 잠시 가려져 있을 뿐 사라지는 것은 아니다.) 업캐스팅은 자식 인스턴스가 부모 자료형의 데이터를 모두 갖고 있기 때문에 형변환 기호를 붙이지 않아도 된다. 변수가 원하는 정보를 인스턴스가 이미 다 알고 있기 때문이다.

class Parent{ ...}
class Child extends Parent{ 
	@Override public void sth(){
    	...
    }
	...
}

public class UpcastingEx{
	public static void main(String[] args){
    	Parent p;
        Child c = new Child("");
        p = c; //업 캐스팅 발생
        }
}

다운 캐스팅 downcasting : 자식 클래스를 원래의 특성으로 돌려 놓는 것으로(그러므로 업캐스팅이 선행되어야 한다), 업 캐스팅과 달리 명시적으로 타입을 지정해야 한다. 부모에서 정의하지 않은 정보를 자식에서 더 정의해줬기 때문에 부모 클래스보다 자식 클래스가 더 많은 데이터를 가졌기 때문이다. 

 

위의 코드를 다운 캐스팅으로 바꾼 것이다.

public class DowncastingEx{
	public static void main(String[] args){
    	Parent p = new Parent("");
        Child c;
        c = (Child) p; //다운 캐스팅 발생
        }
}
728x90
728x90

댓글