728x90
반응형
업캐스팅 (UpCasting)
부모클래스 타입으로 자식클래스 객체를 호출하는 것을 업캐스팅이라고 한다.
업캐스팅을 사용하게 되면 자식클래스를 부모클래스 타입으로 다루게 되기 때문에 부모클래스의 멤버와 메서드에만
접근이 가능하다.
아래 코드처럼 작성하면 a, b 인스턴스는 overriding을 사용한 Print 메서드를 호출하지만 Number 타입을 사용할 수 있다.
class Number {
public int i, j;
public void Print() {
System.out.println(i);
System.out.println(j);
}
}
class Plus extends Number {
@Override
public void Print() {
System.out.println(i+j);
}
}
class Mul extends Number {
@Override
public void Print() {
System.out.println(i*j);
}
}
public class Example {
public static void main(String [] args) {
Number a = new Plus();
a.i = 10;
a.j = 15;
Number b = new Mul();
b.i = 10;
b.j = 15;
a.Print();
b.Print();
}
}
다운캐스팅 (DownCasting)
다운캐스팅은 업캐스팅과 달리 캐스팅 연산자 ()를 사용하여 명시해주어야 한다.
다운캐스팅을 사용하면 자식 클래스의 타입으로 변환되면서 업캐스팅 시 사용하지 못하게 되었던 자식 클래스의 멤버와 메서드에 접근할 수 있게 된다.
따라서 다운캐스팅은 필연적으로 업캐스팅 이후에만 사용된다.
만약 업캐스팅되지 않은 일반적인 부모클래스 타입의 객체를 다운캐스팅하려고 하면 ClassCastException 런타임 에러가 발생한다.
class Number {
public int i, j;
public void Print() {
System.out.println(i);
System.out.println(j);
}
}
class Plus extends Number {
@Override
public void Print() {
System.out.println(i+j);
}
public void CalculatePrint() {
System.out.println("i + j : " + i+j);
}
}
class Mul extends Number {
@Override
public void Print() {
System.out.println(i*j);
}
public void CalculatePrint() {
System.out.println("i * j : " + i*j);
}
}
public class Example {
public static void main(String [] args) {
Number a = new Plus();
a.i = 10;
a.j = 15;
Number b = new Mul();
b.i = 10;
b.j = 15;
a.Print();
b.Print();
Plus aPlus = (Plus)a;
Mul bMul = (Mul)b;
aPlus.CalculatePrint();
bMul.CalculatePrint();
}
}
위 코드에서 a와 b를 aPlus와 bMul에 다운캐스팅한 후 CalculatePrint() 메서드를 출력할 수 있게 된 것을 확인할 수 있다.
* UpCasting과 DownCasting 기능을 통해서 코드를 더 일관적으로 작성할 수 있게 되고 Java 언어는 다형성을 갖게 된다.
728x90
반응형
'Java > Java 문법' 카테고리의 다른 글
[Java] 추상 클래스, 추상 메서드 (abstract) (0) | 2024.10.03 |
---|---|
[Java] super, super 생성자 (0) | 2024.10.02 |
[Java] 오버라이딩 (Overriding) (0) | 2024.10.01 |
[Java] 상속 (Inheritance), extends (0) | 2024.10.01 |
[Java] 배열, Boundary Checking (경계 검사), 비대칭 배열 (0) | 2024.09.30 |