Java

[Java, 객체지향] 하위 클래스가 생성되는 과정 & 업캐스팅/다운캐스팅

15호의 개발자 2021. 8. 11. 12:27
반응형

 

1. 하위 클래스가 생성되는 과정

 

 

하위 클래스가 생성되는 과정

 

  • 하위 클래스가 생성될 때 상위 클래스가 먼저 생성된다.

 

  • 상위 클래스의 생성자가 호출되고, 하위 클래스의 생성자가 호출된다.
  • 하위 클래스의 생성자에는 항상 상위 클래스의 생성자가 호출되어야 한다.

 

  • 하위 클래스에서 상위 클래스의 생성자를 호출하는 코드가 없는 경우, 컴파일러는 상위 클래스 기본 생성자를 호출하기 위해 super()를 추가한다.

 

  • super()로 호출되는 생성자는 상위 클래스의 기본 생성자이다.

 

  • 만약 상위 클래스의 기본 생성자가 없는 경우(=매개변수가 있는 생성자만 있는 경우), 하위 클래스는 명시적으로 상위 클래스의 생성자를 호출해야 한다.

 

 

 

참조변수 super

  • 객체 자신을 가리키는 참조변수이다.
  • 인스턴스 메서드나 생성자에서만 사용 가능하며, static 메서드에서는 사용 불가능하다.
  • 상위 클래스의 멤버와 자신의 멤버를 구별할 때 사용하며, 조상 멤버에는 super를, 자신의 멤버에는 this를 붙인다.

 

  • 참조변수 this와 비슷한 역할을 한다.

 

 

 

super() : 조상의 생성자

  • 조상의 생성자를 호출해서, 조상 멤버를 초기화할 때 사용한다.
  • 생성자의 첫 줄에는 반드시 생성자(super() or this())를 호출해야 한다.

 

 

 

2. 참조변수의 형변환

 

참조변수의 형변환이란

쉽게 말해서 사용할 수 있는 멤버의 개수를 조절하는 것이다.

 

이때,

조상-자손 관계의 참조변수만 서로 형변환 가능하며

자손-자손 관계는 참조변수의 형변환이 불가능하다.

 

 

업캐스팅이란?

  • 자손 클래스에서 부모 클래스로 형 변환
  • 상위 클래스로의 묵시적 형 변환

 

ClassA cb = new ClassB();        //묵시적

ClassA: 선언된 클래스형(상위 클래스형)

ClassB: 생성된 인스턴스의 클래스형(하위 클래스형)

 

  • 상위 클래스형으로 변수를 선언하고, 하위 클래스 인스턴스를 생성할 수 있다.
  • 하위 클래스는 상위 클래스 타입을 내포하고 있으므로, 상위 클래스로 묵시적 형 변환이 된다.
  • 상속관계에서 모든 하위 클래스는 상위클래스로 묵시적 형 변환이 된다. (역은 성립 X)

(*묵시적 형 변환: 특별히 뭐를 더 쓰지 않아도 자연스럽게 이루어짐)

 

 

 

다운캐스팅이란?

  • 부모 클래스에서 자손 클래스로 형 변환
  • 묵시적으로 상위 클래스로 형 변환된 인스턴스가 원래 자료형(하위 클래스)으로 변환되어야 하는 경우를 의미한다.

 

  • 하위 클래스로의 형 변환은 명시적으로 되어야 한다. (묵시적 X)
ClassB cB = (ClassB)cb;        //명시적

 

 

 

instanceof 연산자

  • 참조변수의 형변환이 가능한지 확인할 때 사용한다.
  • 형변환이 가능하면 true를 반환한다.
  • 형변환 하기 전 반드시 instanceof로 확인해야 한다.

 

classB instanceof classA    //true

classB가 하위클래스, classA가 상위클래스인 경우, 위의 값은 true가 나온다.

 

(출처: 유튜브 남궁성의 정석코딩)

반응형