내가 상속을 배웠던 언어는 get과 set을 분리해서 정의하는게 없었던 언어라 ( 내가 배우지 않은것일수도 있다 ) set만 오버라이드 할 경우 super를 호출되도 잘되는가에 대한 테스트가 필요했다.

테스트용이라 짧디 짧은 코드지만 그냥 날려버리기 뭔가 아깝다 생각이 들어 글을 남기기로 결정.

class A {
  A() {
    print('A가 생성이 시작되는 시점 - aValue: ${aValue}');
  }
  String aValue = 'default value';
}

class B extends A {
  B() {
    print('B가 생성이 시작되는 시점 - aValue: ${aValue}');
    super.aValue = 'initValue';
  }

  @override
  set aValue(String value) {
    print('set:$value B에서의 오버라이드한 함수가 불려졌다.');
    super.aValue = value;
  }
}

void main() {
  final b = B(); // 출력:A가 생성이 시작되는 시점 - aValue: default value,  B가 생성이 시작되는 시점 - aValue: default value
  print('시점 0 ~ b의 값 : ${b.aValue}'); // 출력: 시점 0 ~ b의 값 : initValue

  b.aValue = 'main - value'; // 출력: set:main - value B에서의 오버라이드한 함수가 불려졌다.

  print('시점 1 ~ b의 값 : ${b.aValue}'); // 출력: 시점 1 ~ b의 값 : main - value
}

set에서만 override를 해서 aValue를 설정할때 따로 print가 되도록 설정이 잘됐다.

super 지정이 잘 동작 한다.

뭐라 쓸 내용이 없네

+ Recent posts