728x90
학습 목표
- 자바의 상속
- 다형성
- 형변환
학습 결과 요약
학습 내용
상속 개념
- 한 클래스가 다른 클래스를 확장(extend) 하는 것으로 상속을 하면 확장 대상 클래스의 public , protected 로 선언된 모든 필드와 메서드에 모두 접근 가능하다. 단, private, default 접근 제한을 갖는 모든 필드와 메서드는 상속 대상에서 제외 된다.
- 확장한 클래스를 자식 또는 하위 클래스라고 부르며 확장 당한 클래스를 부모 또는 상위 클래스라한다.
- 상속 선언 방법
class Child extends Parent { }
- extends 예약어 뒤에 확장할 클래스 이름을 적는다. 다중 상속은 불가능하다.
- 상속을 하면 코드 재사용이 가능하다.
상속 관계 생성자
- 객체는 인스턴스화 해야 사용 가능하다. 그럼 상속 관계에 있는 두 클래스는 어떻게 객체화 될까?
- 자식 객체를 생성하면, 부모 객체가 먼저 생성되고 자식 객체가 그 다음에 생성된다.
Parent 를 상속하는 Child 객체를 생성하면 child 참조 변수는 Child 객체를 참조하고,
Child 객체에서 Parent 객체를 참조하고 있다.
부모 객체의 잠조값은 자식 객체의 인스턴스 변수 중 하나에 저장된다고 한다.
- 자식 클래스의 생성자가 호출되면, 부모 클래스의 기본 생성자를 자동으로 호출한다. 컴파일 할 때super(); 코드가 자동으로 생기기 때문이다.
- 이처럼 자식 생성자에서는 부모의 기본 생성자를 찾기 때문에 부모 클래스에 기본 생성자는 없고, 매개 변수 생성자만 존재한다면 컴파일 에러가 발생한다.
- 이때 컴파일 에러를 피하려면
- 부모 클래스에 기본 생성자 추가
- 자식 클래스의 생성자에서 매개 변수 있는 생성자 명시적 지정으로 해결해야 한다.
- 이때 컴파일 에러를 피하려면
- super 생성자는 반드시 자식 클래스의 생성자에서 가장 첫줄에 선언되어야만 한다.
public class Parent {
public Parent() {
System.out.println("Parent Constructor");
}
public void printName() {
System.out.println("Parent printName()");
}
}
public class Child extends Parent {
public Child() {
System.out.println("Child Constructor");
}
}
public class InheritancePrint {
public static void main(String[] args) {
Child child = new Child();
child.printName();
}
}
// 출력 결과
Parent Constructor
Child Constructor
Parent printName()
메서드 재정의
- 앞서 자식 클래스는 부모 클래스의 public, protected 로 선언된 모든 필드와 메서드에 접근이 가능하다 했다.
여기서 부모 클래스의 메서드가 자식 클래스에 적절하지 않으면 자식 클래스에서 내용을 수정할 방법이 있다. - 메서드 재정의를 통해 가능하다.
- 메서드 재정의란 부모 클래스에 선언된 메서드를 자식 클래스에 동일한 메서드 시그니처로 메서드 내용을 재정의 한다.
- 그럼 자식 객체에서 재정의된 메서드를 호출하면 오버라이딩된 자식 메서드가 호출 된다.
- 경우에 따라 다시 부모의 메서드를 호출이 필요한 경우가 발생하는데, 이때는 super 키워드로 부모의 메서드를 호출하면 된다.
상속 금지
- 특정 클래스는 상속을 하지 못하도록 막는 장치가 있을까?
- final 의 의미는 해당 선언이 최종 상태고, 결코 수정될 수 없음을 뜻한다.
- 클래스 선언부에 final 키워드를 지정하면 이 클래스는 최종적인 클래스이므로 상속할 수 없는 클래스가 된다.
오버라이딩 금지
- 메서드 선언시 final 을 선언하면 역시 최종적인 메서드이므로 오버라이딩할 수 없는 메서드가 된다.
- 자식 클래스가 부모 클래스의 메서드를 재정의할 때 final 메서드는 재정의 불가능하다.
728x90
'Programming > Java' 카테고리의 다른 글
[F-Lab 모각코 챌린지 13일차] Java : 인터페이스와 추상클래스 (0) | 2023.06.15 |
---|---|
[F-Lab 모각코 챌린지 11일차] Java : 자바의신 10장-2 (0) | 2023.06.13 |
[F-Lab 모각코 챌린지 9일차] TIL : 자바의신 9장 (0) | 2023.06.11 |
[F-Lab 모각코 챌린지 8일차] TIL : 자바의신 8장 (0) | 2023.06.10 |
[F-Lab 모각코 챌린지 7일차] TIL : hashCode, 자바의신 7장 (0) | 2023.06.09 |
댓글