[기초] 시리즈는 본강의를 수강후 정리한 글들 입니다.
상속
- 연관 있는 클래스들에 대해 공통적인 구성요소를 정의하고, 이를 대표하는 클래스를 정의하는 것
- 상속 관계는 "is a" 관계를 의미하며 extends 키워드를 이용해 상속 관계를 정의
- 상속 관계에서 상속을 받는 클래스 - 자식클래스
- sub class, derived class, extended class, child class
- 상속 관계에서 상속을 제공하는 클래스 - 부모클래스
- super class, base class, parent class
- 상속 관계에서 상속을 받는 클래스 - 자식클래스
- 자식클래스는 부모클래스를 상속받아서 부모클래스의 모든 자원 (속성, 메소드)을 사용할 수 있음.
- 그러나 private 으로 접근 지정자가 지정된 필드나 메소드는 상속 불가능
- 자식클래스는 부모클래스에 없는 필드와 메소드를 정의하여 기능을 추가할 수 있음.
- 또한 , 상위 클래스에 정의된 메소드를 재정의하여 다르게 동작시킬 수 있음. (오버라이딩)
protected
- 상속 대상이 되는 부모 클래스에 protected 접근 지정자로 정위된 구성요소는 자식 클래스 구성요소가 됨.
- 자식 클래스는 부모 클래스의 protected, public 구성요소에 대해 this 접근이 가능.
- 즉, 상속 관계에서 자식 클래스는 부모 클래스에서 제공하는 구성요소들을 자신의 구성요소로 포함함.
- 부모 클래스의 private 구성요소는 자식클래스에서 직접 접근 불가
상속 관계의 초기화 과정
- 상속 관계에서 자식클래스를 인스턴스화 하면 부모 클래스의 객체도 인스턴스화가 진행됨.
- 자식 클래스의 객체가 인스턴스화 되기 위해서는 먼저 부모 클래스의 객체가 인스턴스화 되어야 함.
- 메모리 구조관점에서 보면 자식 클래스가 인스턴스화가 될 때 heap 영역에 메모리 할당이 될 때
부모 클래스를 상속 받았기때문에 부모클래스 객체의 메모리 공간까지 같이 할당이 되어야함.
- 메모리 구조관점에서 보면 자식 클래스가 인스턴스화가 될 때 heap 영역에 메모리 할당이 될 때
- 따라서, 상속 구조에서 가장 상위의 부모 클래부터 차례로 인스턴스화가 진행됨.
super()
- super() 생성자는 자식 클래스에서 명시적으로 부모클래스의 생성자를 호출할 수 있도록 하는 방법
- 상속 관계에서 부모 클래스의 생성자 호출을 외부에서 명시적으로 지정할 수 없음.
- 자바는 자식 클래스의 객체가 인스턴스화 될 때 기본적으로 부모 클래스의 디폴트 생성자를 호출.
- 부모 클래스에 디폴트 생성자가 정의되어 있지 않으면 자식 클래스는 명시적으로 임의의 부모 클래스의 생성자를 호출해야 함.
메소드 재정의 = 오버라이드
- 부모 클래스의 메소드를 자식 클래스가 확장하거나 다시 정의하는 것
- 매소드 재정의를 구현하는 방법은 부모 클래스로부터 상속받은 메소드의 반환타입, 메소드명, 파라미터를 동일하게 하여 자식 클래스에서 정의
- 기능/ 바디 부분만 다름
- 자식 클래스가 부모 클래스의 메소드를 재정의할때 접근 지정자의 범위는 넓거나 같아야 함.
- 오버로딩 vs 오버라이딩
- 오버로딩
- 하나의 클래스 안에서 일어나는 일
- 오버라이딩
- 상속관계에서 일어나는 일 = 2 개의 클래스 사이에서 일어나는 일
- 오버로딩
super
- 메소드 재정의는 부모 클래스로부터 상속 받은 기능을 새롭게 변경하거나 확장하기 위해서임
- 자식 클래스에서 상속 받은 메소드의 기능을 확장하기 위해서는 부모 클래스의 메소드에 대한 호출이 필요
- super.부모클래스의메소드 (); + 확장하고자 하는 기능들 추가
- 자식 클래스가 부모 클래스의 구성요소에 접근하기 위해서는 super 키워드를 이용
2022.08.10 - [JAVA] - [JAVA] 상속 / super / 부모생성자/ 클래스형변환
2022.08.10 - [JAVA] - [JAVA] 메소드 - 오버라이딩
'☕JAVA > 🐣 강의 [JAVA]' 카테고리의 다른 글
[JAVA][기초] Object 클래스와 메소드 (0) | 2022.10.12 |
---|---|
[JAVA][기초] up-casting / down- casting 과 다형성 polymorphism (0) | 2022.10.11 |
[JAVA][기초] 패키지 Package & 패키지 구성 (0) | 2022.10.07 |
[JAVA][기초] Static 과 final (0) | 2022.10.05 |
[JAVA][기초] Java 메모리 모델 (0) | 2022.10.05 |