객체 지향 프로그래밍에서 부모 클래스의 멤버를 자식 클래스에게 물려주는 것을 상속이라고 부릅니다.
자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지 결정하고 선택된 부모 클래스는 extends 뒤에 써줌.
class 자식클래스 extends 부모클래스 {
//필드
//생성자
//메소드
}
여러 개의 부모 클래스를 상속할 수 없으므로 extends 뒤에는 단 하나의 부모 클래스만 와야함
부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외
그리고 부모 클래스와 자식 클래스가 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메소드도 상속 대상에서 제외
모든 객체는 클래스의 생성자를 호출해야만 생성되며, 부모 생성자는 자식 생성자의 맨 첫 줄에서 호출됨
만약 Computer의 생성자가 명시적으로 선언되지 않았다면 컴파일러는 super 기본 생성자를 생성
public Computer() {
super();
}
자식클래스( 매개변수선언, ...) {
super( 매개값, ...);
}
위 코드는 매개값의 타입과 일치하는 부모 생성자를 호출
super(매개값, ...) 가 생략되려면 부모 클래스에 기본 생성자가 존재하여서 super()를 자동 추가할 수 있어야 함
super( 매개값,...) 은 반드시 자식 생성자 첫 줄에 위치해야함
부모 클래스에서 상속받은 메소드를 수정해 자식 클래스에서 재정의하는 것
부모의 메소드와 동일한 리턴 타입, 메소드 이름, 매개 변수 목록을 가져야 함
접근 제한을 더 좁게 수정 불가
(public이나 default나 private로 수정 불가
반대로 default는 public으로 수정 가능)
private 메소드
정적 메소드
final 메소드
메소드가 재정의 되면 자식 객체에서 메소드를 호출시에 부모 객체의 메소드는 숨겨지고 재정의된 자식 메소드가 호출
@Override 어노테이션을 붙여주면 메소드가 정확히 재정의된 것인지 컴파일러가 확인해줌
super.부모메소드();
자식 클래스가 메소드를 오버라이딩하면 자식 객체는 부모 클래스의 오버라이딩 된 메소드를 숨김
그 숨겨진 메소드를 호출하려면 super 키워드를 사용
Super는 현재 객체에서 부모 클래스를 참조한다는 것을 의미함.
final 클래스는 상속 불가능, 즉 부모 클래스가 될 수 없어 자식 클래스를 만들 수 없음
final 메소드는 재정의 할 수 없는 메소드가 됨
protected는 public 과 defaul 접근 제한의 중간쯤에 해당함
같은 패키지에서는 접근 제한이 없지만 다른 패키지에서는 자식 클래스만 접근 허용