[ 자바의 신 ] 상속 = 확장

Do_It·2023년 12월 19일

상속

상속을 받게 된 하위 클래스의 인스턴스를 생성하면 상위 클래스의 기본 생성자가 먼저 호출되고 그 이후 하위 클래스의 생성자가 호출된다.

왜 그럴까?

상위클래스는 하위클래스의 일부이기 때문이다. 일부이기 때문에 올바르게 초기화가 되기 위해 상위클래스의 기본 생성자를 호출하는 것이다.

자바는 상위 클래스의 매개 변수가 없는 기본 생성자를 찾는 것이 기본이다. 그래서 상위 클래스에 매개 변수가 있는 생성자만 있을 경우 super()를 이용해서 부모 생성자를 꼭 호출해야만 한다.

Overriding

  • 하위 클래스에서 상위 클래스에 있는 메소드와 동일하게 선언하는 것을 "메소드 Overriding" 이라고 한다.
  • 상위 클래스에 선언되어 있는 메소드와 동일하게 선언되어 있는 메소드를 하위 클래스에 선언하면 하위 클래스의 메소드만 실행된다.
    "동일하게 선언되어 있다 = 메소드 이름과 매개 변수의 타입 및 개수가 같다는 것.

하위 클래스에서 접근 권한이 축소될 경우에는 컴파일 에러가 발생한다.

왜? 왜 에러가 발생할까?

첫번째는 다형성의 일관성 깨지기 때문이다. 하위 클래스에서 상위 클래스 타입으로 다룰 때에 메서드의 동작을 예측할 수 없어진다. 이는 곧 다형성의 이점이 상실된다.
두번째는 SOLID의 원칙 중 하나인 개방폐쇠원칙에 위반 되기 때문이다. public에서 private이 되는 것은 축소에는 닫혀있어야한다는 원칙을 어긴다. 반대로 private에서 public이 되는 것은 확장에 대해 열려있어야한다는 원칙을 지킨다.

profile
오늘의 노력이 내일의 성장으로 이어지고 있음을

0개의 댓글