상속(Inherit)
상속
- 다른 클래스의 멤버(필드, 메서드)를 새 클래스가 자신의 멤버처럼 사용할 수 있는 기능
- 클래스의 재사용, 연관된 클래스들에 대한 공통적인 규약 정의
- 코드를 공통으로 관리하기 때문에 코드의 추가 및 변경 용이
- 코드의 불필요한 중복 방지, 프로그램의 생산성 향상
- 모든 클래스는 Object클래스의 자식클래스
- 부모클래스의 생성자, 초기화 블록은 상속 불가
- 부모클래스의 private멤버는 직접 접근 불가
- 자바는 단일 상속만 지원
- extends 키워드 사용
접근제한자] class 클래스명 extends 클래스명 {
// ...
}
public class Child extends Parent {
// ...
}
super() / super.
1) super()
- 부모 객체의 생성자를 호출하는 메서드
- 자식 클래스 생성 시 자동으로 존재
- 매개변수가 있는 부모생성자 호출 시 super(매개변수, 매개변수) 사용
- 명시적 작성 시 첫 줄에만 작성 가능
2) super.
- 상속을 통한 자식 클래스 정의 시 해당 자식 클래스의 부모 객체를 가리키는 참조 변수
- 자식 클래스 내에서 부모 클래스 객체에 접근하여 필드나 메서드 호출 시 사용
오버라이딩(Overriding)
- 자식 클래스에서 상속 받은 부모 클래스의 메서드를 재정의
- 재정의 시 자식 클래스의 메서드가 우선권 우위
- 메서드 헤드라인 위에 Annotation / @Override 작성
@Override
public String toString() {
return "Book [title=" + title + ", author=" + author + ", price=" + price + "]";
}
오버라이딩 / 오버로딩
오버라이딩 | 오버로딩 |
---|---|
하위 클래스에서 메서드 정의 | 같은 클래스에서 메서드 정의 |
매개 변수 동일 | 매개 변수 상이 |
자식 메서드 접근 범위 >= 부모 메서드 접근 범위 | 무관 |
자식 메서드 예외 수 < 부모 메서드 예외 수 | 무관 |
오버라이딩, 오버로딩 이름 왜 이렇게 비슷하게 지었어요..?