상속
하나의 클래스가 다른 클래스를 포함하는 상위 개념일 때 두 클래스 사이에 일반화 관계가 존재하는데, 이런 일반화 관계를 상속 관계(is a kind of) 라고 한다
상속 선언
접근제한자 class 클래스이름 extends 상위클래스이름
오버라이딩(overriding)
부모와 같은 이름의 메소드를 선언하는 것
최상위 슈퍼 클래스 : object
모든 클래스는 자동으로 object 클래스를 상속받음
클래스 상속 개념에서 주의할 점 01
상위 클래스 타입 변수에 하위 클래스 주소를 치환할 수 있음
public class a extends b {}
b c = a; // 가능
a c = b; // 불가능
a 클래스를 b 클래스의 하위 클래스로 지정했다고 가정했을 때,
b type 을 가진 c 라는 변수에 a 클래스 (b 클래스의 하위 클래스) 의 주소를 치환하는 것은 가능하지만
a type 을 가진 c 라는 변수에 b 클래스 (a 클래스의 상위 클래스) 의 주소를 치환하는 것은 불가능
클래스 상속 개념에서 주의할 점 02
상위 클래스 주소를 하위 클래스 타입 변수에 치환하려고 할 때는 casting 을 활용
public class a extends b {}
b c = new a();
a e = (a)c;
b type (상위 클래스) 을 가진 c 변수에 a 클래스 (하위 클래스) 의 주소를 치환한 뒤,
a type (하위 클래스) 을 가진 e 변수에 c 변수 (b type 을 갖고 있으나 a 클래스의 주소를 가지고 있음) 의 주소를 치환하고 싶을 경우에는
c 변수의 type 을 강제적으로 a type casting 하여 치환해 줄 수 있음
a e = c;
만약 casting 을 하지 않고 위처럼 치환해 주려고 한다면,
type mismatch 오류가 발생
-> e 는 a type 이지만 c 는 b type (a 보다 상위 클래스) 이기 때문
-> 비록 c 가 a 클래스의 주소를 저장하고 있다고 하더라도 type 이 다르기 때문에 casting 과정을 거쳐야 함