IT수업/JAVA PART1

IT 수업 12주차 (28) 상속_업, 다운캐스팅

워제하 2024. 3. 11. 12:10

● 업캐스팅

- UpCasting : 상위클래스 참조변수 = 하위클래스 객체

UpCasting은 상위클래스형으로 형변환을 하는 문법으로 자식 클래스가 부모 클래스 타입으로 캐스팅 되는 것이다.

부모 클래스형의 참조변수를 통해서 하위클래스를 연결하면 된다.

형을 일치시킬땐 괄호()를 사용하지만 (ex. Point2D up = (Point2D) new Point3D ;) 자동형변환 되기때문에 생략가능하다.

 

- 사용하는 이유?
객체를 연결하기 위한 공통된 참조변수가 필요하기 때문에 UpCasting을 한다.

또한, 상위클래스에서 메소드들을 잘 정의하면 상속받는 모든 하위클래스에서 이 메소드들을 오버로딩하여 활용할 수 있기 때문에 다형성이 생긴다.

 

 

● 다운캐스팅

- DownCasting : 하위클래스 참조변수 = 상위클래스 형객체
DownCasting은 상위클래스 객체를 하위클래스형으로 형변환을 시도하는 문법으로 업캐스팅된 것을 다시 원상태로 돌리는 것을 말한다.
DownCasting은 강제형변환을 하는데 메모리의 접근영역 문제가 생기기 때문에 타입을 명시적으로 지정해줘야 한다.

 

- 사용하는 이유?

확장된 부분에 접근하기 위해 DownCasing을 한다.

 

 

즉. 업캐스팅과 다운캐스팅은 클래스 자료형변환이다.

 

 

 

super() : 상속받은 클래스에서 상속해준 클래스의 멤버를 접근할 때 사용하는 키워드

 

 

 

 

● 상속과 관련된 접근지정자

- 슈퍼 클래스의 private 멤버는 서브 클래스에서 접근할 수 없다.

- 슈퍼 클래스의 protected 멤버는 같은 패키지에 있는 '서브 클래스 + 다른패키지' 에 있는 서브 클래스에서도 접근이 가능하다.

- 슈퍼 클래스의 public 멤버는 모든 다른 클래스에서 접근 할 수 있다.

- 슈퍼 클래스의 default 멤버는 같은 패키지에 있는 모든 다른 클래스에서 접근 가능하다.

 

 

 

 

 

< 실습 >

 

만약

Sub ob4 = (Sub)new Super(); 이렇게 강제로 형 변환하면 공간이 없기 때문에 다른 공간을 침범하게 될 수도 있다.

 

 

 

 

 

< 다운캐스팅 실습 >

source의 using field와 toString을 각각 만들어 준다.

 

 

 instanceof는 혼동되어 사용하는 객체를 구분해주는 연산자이다. 즉, 다운캐스팅의 선별용도로 사용하기도 한다.

 

< 실행화면 >

 

 

 

 

 

< 업캐스팅 되어 있는 상태에서 오버라이딩하기 >

 

- 기본 상태

< 실행화면 >

 

 

 

- 오버라이딩 적용 보기 

 

< 실행화면 >

 

업캐스팅된 상태에서는 확장된 부분(추가한 부분)에는 접근이 불가하지만 오버라이딩 된 하위메소드에는 접근이 가능한 것을 볼 수 있다.

 

 

 

 

< 연습문제 >

 

- 방법.1

if문을 사용하여 각각 사용한다. 

 

 

 

 

- 방법.2

 

상위클래스에서 오버라이딩시켜 사용

 

넓이를 추상화로 만들어준다.