
상속(extends)
1. 상속
1) 상속
- 상속은 자식 클래스에서 멤버변수나 메소드를 추가로 확장했을 때 의미를 가진다.
2) 단일 상속
2. 상속과 오버라이딩(Overriding)
오버라이딩 = 재정의
오버로딩 = 중복정의
1) 변수의 오버라이딩
부모의 멤버변수를 자식 클래스에서 오버라이딩하면 부모의 변수는 상속되지 않는다.
2) 메소드의 오버라이딩
부모클래스의 메소드를 자식 클래스에서 오버라이딩하면 부모의 메소드가 상속되지 않는다.
3) 메소드 오버로딩 vs 오버라이딩
오버로딩은 하나의 클래스 내에 동일한 이름의 메소드가 존재하는 것이다. 이때 메소드 이름은 동일하지만 반드시 매개변수의 개수가 다르거나 타입이 달라야 한다.
오버라이딩은 상속 구조에서 부모의 메소드와 동일한 시그니처를 가진 매소드가 자식 클래스에 재정의되는 것이다.
4) 상속과 접근제한
부모 클래스에 선언한 private 멤버변수와 메소드는 자식 클래스로 상속되지 않는다.
또한 메소드 오버라딩에서 부모의 접근제한보다 범위가 확대되는 것은 상관없지만 축소되는 것은 안된다.
3. 상속과 생성자
1) 생성자 연속 호출
- 부모의 멤버변수는 자식 클래스로 상속되기 전에 반드시 초기화 되어야 한다
- 자식 클래스의 객체를 생성하면 무조건 부모 클래스의 생성자가 먼저 실행되는데, 이를 생성자 연속 호출이라고 한다.
- 작성이 되어있지 않아도 컴파일러가 부모의 기본 생성자를 컴파일 해준다.
2) super() 생성자
- this()가 있듯, 부모의 생성자를 호출할 때 사용하는 super()도 있다.
- 상속관계에서 별도의 언급이 없으면 부모의 기본 생성자가 자동으로 호출된다.
- 중요한 것은 부모 클래스에 기본 생성자가 없다면, 반드시 super()를 사용하여 특정 생성자를 명시적으로 호출해야 한다는 것이다.
3) super .
super 참조변수는 부모 클래스의 멤버변수나 메소드를 참조할 때 사용한다.
4. final 예약어
- 멤버변수 앞에 final을 설정하면 해당 멤버변수는 상수가 된다.
- 메서드 앞에 final을 설정하면 해당 메서드는 오버라이딩 할 수 없다.
- 클래스 앞에 설정한 final은 상속을 금지한다.
5. 객체의 타입 변환
1) 묵시적 타입 변환
- 자식 객체를 부모 타입의 참조변수에 할당하는 것.
- 클래스에서는 자식 객체가 부모 타입의 참조변수에 할당되는 것
- 참조변수가 자신이 선언된 타입보다 더 많은 멤버변수를 가진 객체를 참조하는 것
- 실제 참조변수를 통해 실제 사용할 수 있는 멤버변수는 참조변수가 선언된 클래스에 속한 변수(score)만 사용할 수 있다.
⛔ 형제 끼리의 형변환은 절대 허용하지않는다.