상속
객체 지향 프로그래밍의 핵심 요소
기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해줌
>> 기존 클래스의 속성과 기능을 물려받는 것
extends 키워드 사용(대상은 하나만 선택)
부모 클래스(슈퍼 클래스) : 상속을 통해 자신의 필드와 메서드를 다른 클래스에 제공하는 클래스
자식 클래스(서브 클래스) : 부모 클래스로부터 필드와 메서드를 상속받는 클래스
자식 클래스는 부모 클래스의 기능을 물려 받기 때문에 접근할 수 있지만, 부모 클래스는 자식 클래스에 접근할 수 없음
다중 상속 지원 x
>> 다이아몬드 문제 발생
상속과 메모리 구조
상속 관계의 객체를 생성할 때
>> 참조값은 하나이지만 부모와 자식 클래스가 모두 생성되고 공간도 구분
상속 관계의 객체를 호출할 때
>> 대상 타입을 정하고 호출자의 타입을 통해 대상 타입을 찾음
현재 타입에서 기능을 찾지 못하면 상위 부모 타입으로 기능을 찾아서 실행
>> 기능을 끝까지 찾지 못하면 컴파일 오류 발생
상속과 메서드 오버라이딩
부모에게서 상속 받은 기능을 자식이 재정의 하는 것
@Override : @이 붙은 부분 = 애노테이션 (주석과 비슷, 프로그램이 읽을 수 있는 특별한 주석)
오버라이딩한 메서드 위에 이 애노테이션을 붙여야 함
메서드 오버라이딩 조건
메서드 이름 : 같아야 함
메서드 매개변수 : 매개변수 타입, 순서, 개수가 같아야 함
반환 타입 : 반환 타입이 같아야 함, 단 반환 타입이 하위 클래스 타입일 수 있음
접근 제어자 : 오버라이딩 메서드의 접근 제어자는 상위 클래스의 메서드보다 더 제한적이면 안됨
예외 : 오버라이딩 메서드는 상위 클래스의 메서드보다 더 많은 체크 예외를 throws로 선언할 수 없음
static, final, private : 키워드가 붙은 메서드는 오버라이딩 될 수 없음
생성자 오버라이딩 : 생성자는 오버라이딩 할 수 없음
super - 부모 참조
부모와 자식의 필드명이 같거나 메서드가 오버라이딩 되어 있으면, 자식에서 부모의 필드나 메서드를 호출 할 수 없음
>> super는 부모 클래스에 대한 참조를 나타냄
super - 생성자
상속 관계를 사용하면 자식 클래스의 생성자에서 부모 클래스의 생성자를 반드시 호출해야 함(규칙)
>> super(...) 사용
상속 관계의 생성자 호출은 결과적으로 부모에서 자식 순서로 실행
>>부모의 데이터를 먼저 초기화하고 그 다음에 자식의 데이터 초기화
상속 관계에서 자식 클래스의 생성자 첫줄에 반드시 super(...) 호출
>> super()인 경우 생략 가능
'Java' 카테고리의 다른 글
Java / 추상 클래스와 인터페이스 (0) | 2025.02.23 |
---|---|
Java / 다형성 (0) | 2025.02.23 |
Java / final (0) | 2025.02.22 |
Java / 자바 메모리 구조와 static (0) | 2025.02.22 |
Java / 접근 제어자 (0) | 2025.02.21 |