728x90
1. 개념
1) 업캐스팅 : 서브클래스(하위클래스)의 인스턴스를 슈퍼클래스(상위클래스)의 참조로 형변환하는 것.
Parent pobj = new Child();
✔ 서브클래스에서 정의된 메서드를 사용한다.
단, 슈퍼클래스와 동일한 메서드만 사용가능하다.
2) 다운캐스팅 : 슈퍼클래스(상위클래스)의 참조를 서브클래스(하위클래스)의 참조로 형변환하는 것.
Child cobj = (Child) Parent;
2. 사용이유
- 상속관계에 있을 때, 업캐스팅은 코드의 유연성과 다형성을 향상시킨다.
- 다운캐스팅은 업캐스팅 했다가 다시 원래의 서브클래스 타입으로 되돌릴 때 사용한다.
3. 예시 코드
// Shape 클래스를 정의합니다.
abstract class Shape {
public abstract void draw(); //추상메서드
}
// Circle 클래스와 Square 클래스가 Shape를 상속합니다.
class Circle extends Shape {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
public void calculateArea() {
System.out.println("Calculating circle area");
}
}
class Square extends Shape {
@Override
public void draw() {
System.out.println("Drawing a square");
}
public void calculateArea() {
System.out.println("Calculating square area");
}
}
public class DrawingApplication {
public static void main(String[] args) {
Shape[] shapes = new Shape[3];
shapes[0] = new Circle(); //업캐스팅
shapes[1] = new Square(); //업캐스팅
shapes[2] = new Circle(); //업캐스팅
// 업캐스팅을 통해 다양한 Shape 객체를 배열에 저장합니다.
for (Shape shape : shapes) {
shape.draw(); // 다양한 Shape 객체의 draw 메서드를 호출합니다.
// 다운캐스팅을 사용하여 Circle 클래스의 메서드를 호출합니다.
if (shape instanceof Circle) {
Circle circle = (Circle) shape;
circle.calculateArea();
}
}
}
}
728x90
'프로그래밍 언어 > Java' 카테고리의 다른 글
[과제] UML에 맞게 싱글톤 패턴 적용하기 (0) | 2023.12.18 |
---|---|
[Java] 싱글톤 패턴 개념 및 구현방법 (0) | 2023.12.18 |
[Java] StringBuilder 사용 이유 & 주요 메서드 (0) | 2023.12.17 |
[과제] 상속, 오버라이딩 (1) | 2023.12.16 |
[과제] 회원관리 - 객체지향프로그래밍 (1) | 2023.12.12 |