5.1 상속의 개념

5.2 클래스 상속과 객체
자바의 상속선언
- extends 키워드 사용하여 상속선언
- 상속 부모클래스 : 슈퍼클래스, 상속 자식클래스 : 서브클래스


- 서브클래스는 슈퍼클래스의 private 멤버 외 모든 멤버에 접근할 수 있다.
- 자바 상속의 특징
- 클래스 다중상속 x (C++과 달리). 그러나 인터페이스는 다중상속 가능
- 자바의 모든 클래스는 자바에서 제공하는 Object 클래스를 자동으로 상속받도록 컴파일된다.
5.3 protected 접근 지정
- 자바의 접근 지정자 : private, public, protected, 디폴트 >>모든 멤버는 이 중 하나로 반드시 지정되어야 함.

- 디폴트 접근 지정: 접근 지정자가 선언되어 있지 않을 때
protected 멤버
- 슈퍼클래스의 protected 멤버에 접근 가능한 경우
- 같은 패키지에 속한 모든 클래스
- 상속되는 서브 클래스(패키지는 상관 x)
5.4 상속과 생성자
- 서브클래스와 슈퍼클래스의 생성자 호출 및 실행
Q. 서브클래스의 객체가 생성될 때 서브클래스의 생성자와 슈퍼클래스의 생성자가 모두 실행되는가? 아니면 서브클래스의 생성자만 실행되는가?
A. 둘 다 실행된다. 생성자의 목적: 객체초기화 이므로 서브클래스의 생성자는 서브클래스의 멤버나 필요한 초기화 수행, 슈퍼클래스의 생성자는 슈퍼클래스의 멤버나 필요한 초기화 각각 수행
Q. 서브클래스의 생성자와 슈퍼클래스의 생성자 중 누가 먼저 실행되는가?
A. 슈퍼클래스의 생성자가 먼저 실행된다. (서브클래스는 자신의 코드 실행 전 슈퍼클래스의 생성자 호출)
서브클래스에서 슈퍼클래스 생성자 선택
- 슈퍼클래스에 여러 개의 생성자가 있을 수 있음
- 원칙적으로 서브 클래스의 개발자가 서브클래스의 각 생성자에 대해 함께 실행할 슈퍼클래스의 생성자를 지정해야 한다. 그러나 슈퍼클래스의 생성자를 명시적으로 지정하지 않으면 컴파일러는 묵시적으로 슈퍼클래스의 기본생성자가 호출되도록 컴파일한다.



super()을 이용하여 명시적으로 슈퍼 클래스의 생성자 선택
- 서브 클래스의 생성자에서 슈퍼 클래스의 생성자를 명시적으로 선택하는 것이 원칙
- super()을 이용하면 서브 클래스의 생성자에서 슈퍼 클래스 생성자를 명시적으로 선택할 수 있음
- super() = 슈퍼 클래스 생성자의 호출 - 괄호 안에 매개변수를 주어 매개변수를 가진 슈퍼클래스의 생성자 호출 가능

5.5 업캐스팅과 instanceof 연산자
- 캐스팅(casting) : 타입 변환 - 자바에서 클래스에 대한 캐스팅은 업캐스팅(upcasting)과 다운캐스팅(downcasting)으로 나뉜다.
업캐스팅
- 서브클래스는 슈퍼클래스의 속성 상속, 서브클래스는 슈퍼클래스로 취급될 수 o
- 업캐스팅: 서브클래스 객체가 슈퍼클래스 타입으로 변환되는 것

- 업캐스팅으로 통해 p는 Student 객체를 가리키고 있다. 그러나 p는 Person 타입이기에 p로는 Person 클래스의 멤버만 접근할 수 있다. (슈퍼클래스의 레퍼런스 p가 서브클래스 객체를 가리키도록 치환되는 것이 업캐스팅.)

- Student 객체가 Person타입으로 업캐스팅되면 Person 클래스 객체로 취급되며 Student클래스의 필드 or 메소드 접근불가.
- 업캐스팅은 명시적 타입변환을 하지 않아도 됨(Student 객체는 Person타입이기도 하기 때문)
'언어 > JAVA' 카테고리의 다른 글
[JAVA] ch04. 클래스와 객체 (0) | 2025.01.06 |
---|---|
[JAVA] ch03. 반복문과 배열 그리고 예외 처리 (0) | 2025.01.03 |
[JAVA] ch02. 자바 기본 프로그래밍 (0) | 2025.01.01 |
[JAVA] ch01. 자바 시작 (1) | 2024.12.28 |