반응형
Up Casting
하위클래스
public class UpCastingChild extends UpCastingParent {
// int x;
// int y;
// UpCastingParent의 함수들도 상속 받았다.
int z;
public UpCastingChild() {
x = 100;
y = 200;
z = 300;
}
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println(x + "," + y + "," + z);
}
@Override
public int add() {
// TODO Auto-generated method stub
System.out.println("Child의 add() 함수 호출");
return x + y + z;
}
public int sub() {
System.out.println("Child의 sub() 함수 호출");
return x - y - z;
}
public int getZ() {
return z;
}
public void setZ(int z) {
this.z = z;
}
}
상위클래스
public class UpCastingParent {
int x;
int y;
public UpCastingParent() {
x = 10;
y = 20;
}
public void print() {
System.out.println(x + "," + y);
}
public int add() {
System.out.println("Parent의 add() 함수 호출.");
return x + y;
}
}
실행할 메인클래스
public class UpCastingMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
//UpCasting이란 데이터타입을 부모클래스로 선언하는 것(상속관계이어야만 함)
//UpCasting 클래스의 객체를 생성할 때,
// 자동으로 x 는 10, y 는 20이 저장되도록 하시오
// 단 생성자의 파라미터는 아무것도 안씁니다.
UpCastingParent up = new UpCastingParent();
up.print();
System.out.println("----------------------");
int result = up.add();
System.out.println(result);
System.out.println("----------------------");
// UpCastingChild 클래스의 객체 생성시
// 생성자의 파라미터는 아무것도 없이,
// x = 100, y = 200, z = 300으로 초기화하는 코드를 작성하세요.
UpCastingChild upc = new UpCastingChild();
upc.print();
System.out.println("----------------------");
int result2 = upc.add();
System.out.println(result2);
System.out.println("----------------------");
int result3 = upc.sub();
System.out.println(result3);
System.out.println("----------------------");
// 상속관계의 클래스에대한 캐스팅
UpCastingParent ucp = new UpCastingChild();
// 위 코드를 보면 변수는 상위클래스이고, 객체는 하위클래스이다.
// 상위클래스가 하위클래스를 가리키는 것을 업 캐스팅이라고 한다.
// 이처럼 상속관계의 객체를 다르게 사용하는 것이 JAVA는 가능하다.
result = ucp.add();
System.out.println(result);
// 변수는 상위클래스이므로 상위클래스에 add 함수가 있으므로
// 함수가 실행되되 객체(Heap 메모리)가 하위 클래스이고
// 자식 클래스가 add를 오버라이딩 했으므로 하위클래스의 함수가 호출된다.
// ex) result = ucp.sub();
// 업 캐스팅을 통해 상위클래스의 함수를 사용할 수 있지만
// 변수는 상위클래스이므로 상위클래스에 있는 함수만 사용 가능하다.
// sub()는 상위클래스에는 없고, 하위클래스에만 있기때문에 실행할 수 없다.
}
}
반응형
'Language > JAVA' 카테고리의 다른 글
| JAVA - Abstract (추상클래스) (0) | 2022.07.06 |
|---|---|
| JAVA - DOWN CASTING (0) | 2022.07.05 |
| JAVA - 부모(상위)생성자 호출을 위한 super 사용법 (0) | 2022.07.05 |
| JAVA - EXTENDS (상속) (0) | 2022.07.04 |
| JAVA - Getter / Setter (0) | 2022.07.04 |