상속
상속
상속을 해주는 클래스(= 부모 클래스, superclass)가 가진 필드(클래스 레벨의 변수)와 메소드를 상속을 받는 클래스(=자식 클래스, subclass)에서 사용할 수 있게 한다.
새 클래스를 만들고자 할 때 원하는 코드의 일부를 포함하는 클래스가 이미 있는 경우 상속을 통해 기존 클래스에서 새 클래스를 파생할 수 있다. 즉 재사용이 가능하다.
상속의 특징
- 인터페이스를 제외한 부모 클래스를 단 하나만 가질 수 있다. (다중 상속이 안된다.)
- 부모 클래스를 가진 자식 클래스도 다른 클래스의 부모 클래스가 될 수 있다.
- 모든 클래스의 최상위 부모 클래스는 Object라는 클래스이다.
super 키워드
- 부모 클래스의 생성자나 메소드를 호출한다는 것을 뜻한다.
super()
메서드는 부모 클래스의 생성자 함수를 호출하는 메서드이다.- 자식 클래스의 생성자 함수에는 기본적으로 super()를 호출해야 한다.
메소드 오버라이딩
- 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것이다.
메소드 디스패치
- 오버 라이딩된 메소드들 중 어떤 것을 호출할 지를 정해서 호출하는 것이다.
- 메소드 디스패치는 두가지 타입이 존재한다.
- 스태틱 (정적) : 컴파일 타임에 호출 할 메소드를 알 수 있다.
- 다이나믹 (동적) : 런타임에 호출 할 메소드를 알 수 있다.
정적 메소드 디스패치 (static method dispatch)
- 컴파일 시점에 컴파일러가 어떤 클래스의 메소드를 실행해야하는지 알고 바이트코드로도 남는다.
동적 메소드 디스패치 (static method dispatch)
- 컴파일 시점에선 어떤 메소드를 호출하는지 모르고 추상 타입의 메소드를 호출하는것만 알고 있다.
- 런타임 시점에 할당된 객체의 타입을 보고 메소드를 실행한다.
- 예시
This post is licensed under CC BY 4.0 by the author.