상속을 받게 된 하위 클래스의 인스턴스를 생성하면 상위 클래스의 기본 생성자가 먼저 호출되고 그 이후 하위 클래스의 생성자가 호출된다.
상위클래스는 하위클래스의 일부이기 때문이다. 일부이기 때문에 올바르게 초기화가 되기 위해 상위클래스의 기본 생성자를 호출하는 것이다.
자바는 상위 클래스의 매개 변수가 없는 기본 생성자를 찾는 것이 기본이다. 그래서 상위 클래스에 매개 변수가 있는 생성자만 있을 경우 super()를 이용해서 부모 생성자를 꼭 호출해야만 한다.
첫번째는 다형성의 일관성 깨지기 때문이다. 하위 클래스에서 상위 클래스 타입으로 다룰 때에 메서드의 동작을 예측할 수 없어진다. 이는 곧 다형성의 이점이 상실된다.
두번째는 SOLID의 원칙 중 하나인 개방폐쇠원칙에 위반 되기 때문이다. public에서 private이 되는 것은 축소에는 닫혀있어야한다는 원칙을 어긴다. 반대로 private에서 public이 되는 것은 확장에 대해 열려있어야한다는 원칙을 지킨다.