오버라이딩(Overriding)은 객체 지향 프로그래밍에서 하위 클래스(subclass)가 상위 클래스(superclass)의 메서드(method)를 재정의
하는 것을 말한다.
(1) 인스턴스 필드
(2) 인스턴스 메소드
(3) 정적 필드
(4) 정적 메소드
여기서 오버라이딩이 가능한 건 '인스턴스 메소드'뿐이다.
예를 들어 인스턴스 필드 int m 이 있다고 가정하고
A클래스를 상속받은 B클래스가 있을 때,
A a = new B();로 표현이 되고,
이때 인스턴스 필드의 기준점은 선언 타입이다.
a.m은 클래스 A의 필드값을 가리키는 것이다.
반대로, 인스턴스 메소드는 오버라이딩이 되므로 생성자가 기준점이 된다.
생성자가 무엇이냐에 따라 출력이 달라진다.
A a = new B();
인스턴스 필드 / 정적 필드 / 정적 메소드
이 3가지는 기준점이 클래스 A이다. (가리키는 쪽)
인스턴스 메소드만 오버라이딩이 가능하기 때문에 생성자 쪽을 가리킨다.