업캐스팅은 상속관계인 상태에서 데이터타입을 부모클래스로 선언하는것이다.
# 상속관계의 클래스에 대한 캐스팅 (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();
# 변수는 부모클래스이므로 부모클래스에 있는 함수이름만 사용가능하다.
'Java' 카테고리의 다른 글
[Java] 추상(Abstract) (0) | 2022.07.06 |
---|---|
[Java] 다운캐스팅(Downcasting) (0) | 2022.07.05 |
[Java] 상속과 메소드 오버라이딩(Method Overriding), super (0) | 2022.07.04 |
[Java] 멤버변수 저장하기, 가져오기 : setter, getter (0) | 2022.07.04 |
[Java] 패키지, 접근제어자: public, private, protected (0) | 2022.07.04 |
댓글