본문 바로가기
Java

[Java] 업캐스팅(Upcasting)

by eyoo 2022. 7. 5.

업캐스팅은 상속관계인 상태에서 데이터타입을 부모클래스로 선언하는것이다.

# 상속관계의 클래스에 대한 캐스팅 (Type 변환)

 

UpCastingParent 클래스를 만들자.

 

public class UpCastingParent {
	
	int x;
	int y;
	
	public UpCastingParent(){
		x = 10;
		y = 20;				
	}
	
	public void print(){
		System.out.println("x : "+x);
		System.out.println("y : "+y);	
	}
	
	public int add() {
		System.out.println("Parent의 add() 함수 호출");
		return x + y;
	}

}

# UpCasting 클래스의 생성자 초기값 설정으로 x는 10, y는 20으로 정했다.
# 생성자의 파라미터는 쓰지 않는다.

 

 

UpCastingParent를 상속하는 UpCastingChild를 만든다.

 

public class UpCastingChild extends UpCastingParent{
	
//	UpCastingParent의 멤버변수 상속받는다.
	
//	int x;
//	int y;
	
	int z;
	
	public UpCastingChild(){
		x = 100;
		y = 200;
		z = 300;
	}

	@Override
	public void print() {
		// TODO Auto-generated method stub
		super.print();
		System.out.println("z : "+z);
	}

	@Override
	public int add() {
		// TODO Auto-generated method stub
		return x+y+z;
	}
	
	public int sub() {
		return x-y-z;
	}

	public int getZ() {
		return z;
	}

	public void setZ(int z) {
		this.z = z;
	}
}

 

 

메인에서 업캐스팅 해보자

 

UpCastingParent ucp = new UpCastingChild();

# 부모클래스가 자식클래스를 받는다.

 

 

이때 부모클래스의 변수가 stack 메모리에 저장되고

자식클래스로 heap 메모리에 생성된다. (x : 100, y : 200, z : 300)

 

 

이제 add함수를 사용해보자.

 

UpCastingParent ucp = new UpCastingChild();
		
		result = ucp.add();
		
		System.out.println(result);

# 600이 출력된다.

# 변수는 부모클래스이고 부모클래스에 add 함수이름이 있으므로 함수가 실행되지만 객체가 자식 클래스이고 자식클래스가 add를 오버라이딩 했으므로 자식클래스의 함수가 호출된다.

 

 

부모클래스의 관점으로 보기 때문에 자식클래스에는 있지만 부모클래스에는 없는 sub 함수을 실행할수없다.

 

 		result = ucp.sub();

# 변수는 부모클래스이므로 부모클래스에 있는 함수이름만 사용가능하다.

 

 

 

 

 

댓글