상속
상속 - 부모가 자식에게 자산을 물려주는 행위
자식은 자연스럽게 이용 가능
부모 클래스 - 상위 클래스
자식 클래스 - 하위 클래스, 파생 클래스
-> 클래스를 재사용해서 클래스 만들기 때문에 코드의 중복을 줄여줌
* private 접근 제하는을 갖는 필드와 메소드는 상속 대상에서 제외
* 부모 클래스와 자식 클래스가 다른 패키지에 존재 한다면 default 접근 제한을 갖는 필드와 메소드도 상속대상 에서 제외
상속을 이용하면 클래스의 수정을 최소화, 유지보수 시간 최소화
클래스 상속
자식 클래스를 선언 할때 어떤 부모 클래스를 상속 받을 것인지를 결정하고 선택된 부모 클래스는 extends 뒤에 기술
class 자식클래스 extends 부모클래스 {
//필드
//생성자
//메소드
}
자바는 다중 상속 허용 X
-> extends 뒤에는 단 하나의 부모 클래스만 와야한다
부모 생성자 호출
부모 객체가 먼저 생성 -> 자식 객체가 그 다음 생성
부모생성자는 자식 생성자의 맨 첫줄에서 생성
명시적으로 생성자가 선언되지 않았다면 컴파일러에 의해 기본 생성자를 생성
컴파일러는 자식 생성자에 super(); 추가
자식클래스(매개변수선언, ...){
super(매개값, ...);
...
}
super(); 는 반드시 자식생성자 맨위 첫줄에 있어야함
메소드 재정의
부모 클래스의 모든 메소드가 자식 클래스에 맞게 설계되어 있다면 이상적 상속, but 적합하지 않을 수도 있음
자식 클래스에서 다시 수정해서 사용
메소드 오버라이딩 기능 제공
메소드 재정의(@Override)
상속된 메소드의 내용이 자식 클래스에 맞지 않을 경우 , 자식 클래스에서 동일한 메소드를 재정의 하는 것
자식 객체에서 메소드를 호출하면 오버라이딩된 자식 메소드가 호출 된다.
- 부모의 메소드와 동일한 시그니처(리턴타입, 메소드 이름, 매개변수 리스트)를 가져야 한다
- 접근 제한을 더 강하게 오버라이딩 할 수없다.
- 새로운 예외(Exception)를 throws 할 수없다
부모가 public 일시 priavate 수정 불가
부모 default 또는 public 접근 제한 가질수 있음
@Override 메소드는 생략 가능 -> but! 정확히 오버라이딩된 것인지 컴파일러 체크하기 때문에 개발자의 실수를 줄여줌
이클립스 자동 생성 : Source -> Override/Implement Methods
부모 메소드 호출(super)
자식 클래스 내부에서 오버라이딩된 부모 클래스 호출해야 하는 상황 : 명시적으로 super키워드 호출
super 은 부모 객체를 참조
super.부모메소드();
class Parent{
void method1() {...}
void method2() {...}
}
class Child extends Parent{
void method2(){...} // Overriding
void method3(){
method2(); // 재정의된 호출
super.method2();
}
}
final 클래스와 final 메소드
final 키워드는 클래스, 필드, 메소드 선언 시에 사용
해당 선언이 최종 상태, 결코 수정 될 수 없음
상속 할 수 없는 final 클래스
클래스 선언시 final 키워드를 class 앞에 붙이게 되면 최종적인 클래스 이므로 상속 할수 없는 클래스
자식 클래스 생성 불가
public final class 클래스 {...}
오버 라이딩 할수 없는 final 메소드
final 키워드가 붙은 메소드는 최종적인 메소드 이므로 오버라이딩 할수 없는 메소드
public final 리턴타입 메소드([매개변수, ...]){...}
proterted 접근 제한자
protected는 필드, 생성자, 메소드 선언에 사용
부모클래스 new 생성자를 직접 호출 불가, super() 로 생성자 호출
'Back-end > 이것이 자바다[신용권 한빛미디어]' 카테고리의 다른 글
추상 클래스 (0) | 2021.10.04 |
---|---|
타입 변환과 다형성 (0) | 2021.10.04 |
어노테이션 (0) | 2021.10.03 |
Getter 와 Setter 메소드 (0) | 2021.10.03 |
접근제한자 (0) | 2021.10.03 |