상속
Updated:
강의 사이트
http://tcpschool.com/
상속의 개념
1. 상속이란
- 상속이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미
2. 장점
- 기존에 작성된 클래스를 재활용할 수 있다.
- 자식 클래스 설계 시 중복되는 맴버를 미리 부모 클래스에 작성해 놓으면, 자식 클래스에서는 해당 멤버를 작성하지 않아도 된다.
- 클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련한다.
3. 자식 클래스
-
자식 클래스란 부모 클래스의 모든 속성을 물려받아 새롭게 작성된 클래스를 의미
- 부모 클래스의 필드와 메서드만이 상속되며, 생성자와 초기화 블록은 상속되지 않는다.
- 부모 클래스의 접근 제어가 private이나 default로 설정된 맴버는 자식 클래스에서 상속받지만 접근할 수 없다.
- 상속은 단일 상속만 가능하다.
4. Object 클래스
- Object 클래스는 모든 클래스의 부모 클래스.
- 따라서 extends 키워드 사용안해도 됨.
super와 super()
1. super 키워드
- super 키워드는 부모 클래스부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는데 사용하는 참조 변수
- 인스턴스 변수의 이름과 지역 변수의 이름이 같을 경우 인스턴스 변수 앞에 this 키워드를 사용하여 구분
- 부모 클래스 맴버와 자식 클래스의 맴버 이름이 같은 경우 super 키워드를 사용하여 구별
2. super 메서드
- this() 메서드가 같은 클래스의 다른 생성자를 호출할 때 사용
- super() 메서드는 부모 클래스의 생성자를 호출할 때 사용
- 자식 클래스의 인스턴스를 생성하면, 해당 인스턴스에는 자식 클래스의 고유 멤버뿐만 아니라 부모 클래스의 모든 멤버까지도 포함
- 따라서 부모 클래스의 멤버를 초기화하기 위해서는 자식 클래스의 생성자에서 부모 클래스의 생성자까지 호출해야만 한다.
- 부모 클래스의 생성자 호출은 모든 클래스의 부모 클래스인 Object 클래스의 생성자까지 계속 거슬러 올라가며 수행
- 따라서 자바 컴파일러는 부모 클래스의 생성자를 명시적으로 호출하지 않는 모든 자식 클래스의 생성자 첫 줄에 자동으로 다음과 같은 명령문을 추가하여, 부모 클래스의 멤버를 초기화할 수 있도록 해준다.
메서드 오버라이딩
- 오버라이딩이란 상속 관계에 있는 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 같은 시그니처를 갖는 메서드로 다시 정의
- 자식 클래스는 부모 클래스의 private 맴버를 제외한 모든 메서드를 상속받는다.
- 상속받은 메서드는 그대로 사용 가능하고 재정의해도 됨
1. 오버로딩과 오버라이딩
- 오버로딩은 새로운 메서드를 정의하는 것
- 오버라이딩은 상속받은 기존의 메서드를 재정의하는 것