본문 바로가기

Backend/Java

[Java] 슈퍼 클래스 생성자, 캐스팅, 업캐스팅, 다운캐스팅

슈퍼 클래스 생성자

super()

: 서브 클래스에서 명시적으로 슈퍼 클래스의 생성자 선택 호출

- super(parameter);

- 인자를 이용하여 슈퍼 클래스의 적당한 생성자 호출

- 반드시 서브 클래스 생성자 코드의 제일 첫 라인에 와야 함

 

캐스팅

: 변수가 원하는 정보를 다 갖고 있는 것

int a = 0.1; // 에러 발생 x
int b = (int) true; // 에러 발생 o, boolean은 int로 캐스트 불가

캐스팅이 필요한 이유

1) 다형성: 오버라이딩 된 함수를 분리해서 활용할 수 있다.

2) 상속: 캐스팅을 통해 범용적인 프로그래밍이 가능하다.

 

 

업캐스팅

: 묵시적 형변환, 캐스팅이 자동으로 발생

서브 클래스가 슈퍼 클래스로 변환되는 것

업캐스팅은 클래스 명 생략 가능

Parent p = new Child(); 
// Parent를 상속받은 Child는 Parent의 속성을 포함하고 있기 때문에
// (Parent) new Child()할 필요가 없음

업캐스팅을 사용하는 이유

=> 상속을 받은 서브 클래스가 몇 개이든 하나의 인스턴스로 묶어서 관리하기 위함이다.

하나의 인스턴스(슈퍼클래스)로 서브 클래스들을 전부 관리할 수 있다.

슈퍼클래스로 관리하면 자바의 다형성(메서드를 각각 다른 형태로 사용)을 이용해 슈퍼클래스를 여러가지 클래스로 만들 수 있다.

 

다운캐스팅

: 명시적 형변환, 캐스팅할 내용을 적어줘야 하는 경우

슈퍼 클래스가 서브 클래스로 변환되는 것

Parent p = new Child();
Child c = (Child) p;
// 다운캐스팅은 업캐스팅이 발생한 이후에 작용한다.