상속(Inheritance)
상위 클래스의 속성과 메서드를 물려받아 확장하여 새로운 자식 클래스를 정의하는 것

==> 헷갈리게 생겼지만 상위클래스의 그림은 ' 동물'을 뜻합니다.
상속의 특징
- 코드 재사용성 : 상위 클래스에 정의된 필드, 메서드 사용 가능 / 공통된 기능을 상위 클래스에 정의
- 상위클래스의 생성자와 초기화 블록은 상속하지 않음
- extends 키워드 사용
- 상속을 명시하지 않으면 기본적으로 Object 클래스를 상속 받고 있음
- 자바에서는 다중 상속 불가
(클래스 상속에서 다중 상속 허용 X)
- 인터페이스를 사용하여 다중 상속과 비슷한 효과를 구현 가능
상속의 특징(is - a 관계)
- A는 B이다(A is a B) 라는 상속을 통한 관계
- 상위 클래스는 하위 클래스의 공통된 특성과 행동을 정의하며, 하위 클래스는 이를 확장하거나 구체화
- 일반화와 전문화가 필요한 경우 사용
포함 관계(has - a 관계)
- A는 B를 가지고 있다. (A has a B)라는 포함을 통한 관계
- 한 클래스가 다른 클래스의 객체를 속성으로 포함하여 구현
- 구성 요소를 나타낼 때 사용
- 두 클래스는 독립적
| 특징 | IS-A 관계 | HAS-A 관계 |
|---|
| 구현 방식 | 상속 | 포함 |
| 의미 | A는 B이다. | A는 B를 가지고 있다. |
| 클래스 관계 | 상위 클래스와 하위 클래스 | 한 클래스가 다른 클래스의 객체를 포함 |
| 재사용성 | 하위 클래스가 상위 클래스의 특성과 행동을 상속 | 포함된 객체의 기능을 사용하여 동작 확장 가능 |
| 독립성 | 두 클래스는 강하게 결합 | 포함된 클래스는 독립적으로 설계 가능 |
| 예시 | 강아지는 동물이다. | 자동차는 엔진을 가지고 있다. |
상속의 특징
- 접근 제한자 (public, protected, default, private)에 따라 상위 클래스의 멤버에 대한 접근 범위가 결정됨
- 공통된 기능이 정의 되어 있는 상위 클래스만 수정하면 하위 클래스는 모두 적용
=> 유지 보수성이 좋음
Super 키워드
- 하위 클래스에서 상위 클래스와 동일한 이름의 필드가 있을 경우, super를 사용하여 필드를 참조
- 하위 클래스에서 상위 클래스의 메서드를 호출하여 기능을 유지하거나 확장할 수 있음
메서드 재정의(Overriding)
- 메서드 이름, 매개변수, 반환타입이 상위 클래스와 동일해야함
- 접근 제한자는 상위 클래스의 메서드보다 더 넓은 범위로만 변경가능
- 조상보다 더 큰 예외를 던질 수 없음
- @Override 어노테이션 사용을 권장
- 메서드 오버로딩(Overloading)과 다른 개념
final 키워드
- 변경 불가능성을 나타내는 키워드
- 컴파일 타임 안정성을 높이는 데 사용
- 변수 : 값의 고정성
- 메서드 : 재정의 방지
- 클래스 : 상속 불가능
- 과도한 사용은 코드의 유연성을 감소 시킴
final 변수
- 값이 변경되지 않는 상수를 선언할 때 사용
- 선언과 동시에 초기화 혹은 생성자를 통한 초기화를 해야함
- 참조 변수에 final을 사용하면 참조를 바꿀 수는 없지만 객체의 내부 상태는 변경 가능
final 메서드
- 재정의(Overriding) 금지 -> 하위 클래스에서 재정의할 수 없음
- 상위 클래스에서 중요한 동작을 변경되지 않도록 보호할 때 사용
final 클래스
- 상속할 수 없는 클래스 정의
- 클래스 자체를 확장할 필요가 없거나, 보안을 강화해야 하는 경우 사용
- String 클래스는 final로 선언 되어있음