하위 클래스 생성자 내에서 상위 클래스에 선언된 필드에 값을 대입하거나 필드를 수정하는 경우를 보고합니다.

상위 클래스의 필드를 자신의 생성자에서 초기화하고, 하위 클래스의 해당 생성자에 위임하는 것이 바람직합니다. 이렇게 하면 생성 후 필드가 변경되지 않은 경우 이 필드를 final로 선언할 수도 있습니다.

예:


  class Super {
    int x;
  }
  class Sub extends Super {
    Sub(int _x) {
      // Warning: x is declared in a superclass
      x = _x;
    }
  }

이 문제를 방지하기 위해 상위 클래스 생성자를 선언하세요.


  class Super {
    final int x;

    Super(int _x) {
      x = _x;
    }
  }
  class Sub extends Super {
    Sub(int _x) {
      super(_x);
    }
  }