1. 클래스 상속과 객체
자바의 상속 선언
- extends 키워드로 선언
- 부모 클래스를 물려받아 확장한다는 의미
- 부모 클래스 -> 슈퍼 클래스(super class)
- 자식 클래스 -> 서브 클래스(sub class)
- 슈퍼 클래스 객체와 서브 클래스의 객체는 별개
- 서브 클래스 객체는 슈퍼 클래스 멤버 포함
자바 상속의 특징
- 클래스 다중 상속(multiple inheritance) 불허
- C++은 다중 상속 가능
- C++은 다중 상속으로 멤버가 중복 생성되는 문제 있음
- 자바는 인터페이스(interface)의 다중 상속 허용
슈퍼 클래스의 멤버에 대한 서브 클래스의 접근
- 슈퍼 클래스의 private 멤버
- 서브 클래스에서 접근할 수 없음
- 슈퍼 클래스의 디폴트 멤버
- 서브 클래스가 동일한 패키지에 있을 때 접근 가능
- 슈퍼 클래스의 public 멤버
- 서브 클래스는 항상 접근 가능
- 슈퍼 클래스의 protected 멤버
- 같은 패키지 내의 모든 클래스 접근 허용
- 패키지 여부와 상관없이 서브 클래스는 접근 가능
2. 상속과 생성자
서브 클래스/슈퍼 클래스의 생성자 호출 및 실행
서브 클래스의 객체가 생성될 때
- 슈퍼 클래스 생성자와 서브 클래스 생성자 모두 실행됨
- 호출 순서
- 서브 클래스의 생성자 먼저 호출
- 서브 클래스의 생성자는 실행 전 슈퍼 클래스 생성자 호출
- 실행 순서
- 슈퍼 클래스의 생성자가 먼저 실행된 후 서브 클래스의 생성자 실행
서브 클래스와 슈퍼 클래스의 생성자 선택
- 슈퍼 클래스와 서브 클래스는 각각 여러 개의 생성자 작성 가능
- 서브 클래스의 객체가 생성될 때
- 슈퍼 클래스의 생성자 1개와 서브 클래스 생성자 1개가 실행
- 서브 클래스의 생성자와 슈퍼 클래스의 생성자가 결정되는 방식
- 개발자의 명시적 선택
- 서브 클래스 개발자가 슈퍼 클래스의 생성자 명시적 선택
- super() 키워드를 이용하여 선택
- 컴파일러가 기본 생성자 선택
- 서브 클래스 개발자가 슈퍼 클래스의 생성자를 선택하지 않는 경우
- 컴파일러가 자동으로 슈퍼 클래스의 기본 생성자 선택
- 개발자의 명시적 선택
- 컴파일러에 의해 슈퍼 클래스의 기본 생성자가 묵시적으로 선택됨
- 슈퍼 클래스에 기본 생성자가 없어 오류가 난 경우
- 서브 클래스의 매개 변수를 가진 생성자에 대해서도 슈퍼 클래스의 기본 생성자가 선택된다.
- super()로 슈퍼 클래스의 생성자 명시적 선택
- 서브 클래스에서 명시적으로 슈퍼 클래스의 생성자 선택 호출
- 사용 방식
- super(parameter);
- 인자를 이용하여 슈퍼 클래스의 적당한 생성자 호출
- 반드시 서브 클래스 생성자 코드의 제일 첫 라인에 와야 함
'Programming Languages > Java' 카테고리의 다른 글
[5장] Java의 메소드 오버라이딩 (0) | 2021.05.04 |
---|---|
8주차 스터디 인증 (0) | 2021.05.04 |
[4장] 객체 배열/메소드 (0) | 2021.04.13 |
[4장] 자바 생성자의 개념과 특징/ this 레퍼런스 (0) | 2021.04.10 |
[4장] 객체 지향의 특징/ 자바의 클래스와 객체 (0) | 2021.04.10 |