다음과 같은 자바코드가 있다. 코틀린으로 다시 작성해보자.
접근제어자, getter, 추상메소드 전부 다 구현한 모습. 아직까지 크게 다르진 않다.
상속 부분도 보도록 하겠다. 자바코드 이다.
아래처럼 코틀린으로 작성할 수 있다. 주생성자 다음에 콜론을 이용해 생성자를 넣어주는 모습을 볼 수 있다.
조금 더 응용해보자. 자바코드 이다.
코틀린에서는 override와 custom getter를 이용해 아래처럼 작성할 수 있다.
하지만 왜 에러가 뜰까 ?
추상 프로퍼티가 아니라면 open을 꼭 붙여줘야 한다.
아래의 인터페이스 도면을 작성 해보자.
아래는 자바 인터페이스 이다. 코틀린으로 작성 해볼것이다.
코틀린으로 작성한것이다.
아래는 인터페이스를 구현하는 자바코드이다.
코틀린으로 작성해보자. 생성자 뒤에 구현할 인터페이스를 작성한다.
아래의 코드에서 Derived를 인스턴스화 해서 Derived(300)을 실행해본다면 ?
결과는 다음과 같다.
이유는 상위클래스의 생성자가 호출되는 시점에서 하위 클래스의 number라는 값이 초기화가 이루어지지 않아서이다.
따라서 상위 클래스의 생성자와 init블럭에서는 하위클래스의 field에 접근하면 안 된다.
정확히는 final이 아닌 프로퍼티에 접근하면 안 된다.(하위 클래스에서 override 하고 있는 프로퍼티에 접근하면 안됨 )
요약하자면
상위 클래스를 설계할 때 생성자 또는 초기화 블록에 사용되는 프로퍼티에는
open을 피해야 한다
다음 포스팅에선 접근제어자 를 공부해보도록 하겠습니다.