[day10] java-basic : 상속

1 분 소요

상속을 쓰는 목적

  • 확장성이다.
  • 변화에 둔감하게 만들기 위함이다.
  • 두 클래스에 중복되는 멤버변수와 메소드가 있다면 걔네들을 공통의 애들을 잘라서 위로 올리는 것도 상속이다.

클래스의 관계

  • 부모 = 상위 = Super
  • 자식 = 하위 = Sub

  • 하위 클래스는 상위 클래스에 선언되어 있는 멤버변수와 메소드를 자기 것처럼 쓸 수 있다.
  • 단, 접근제한자에 따라 부모클래스의 사용 가능 여부가 달라진다.
  • 부모클래스는 자식클래스에 뭐가 있는지 잘 알 수 없다.

  • super.변수,super.메소드, super(매개변수) : 부모(상위)클래스의 객체, 생성자에 접근할 때 사용하는 키워드는 super이다.
  • this() 생성자도 super() 생성자도 제일 첫 줄에 나와야 하기 때문에 같이 쓰지 못한다.
  • 다만, 상속을 받게 되면 자동으로 super() 생성자를 가지고 있다다. 보통 숨김으로 존재하기 때문에 자식클래스의 생성자를 사용할 수 있게 되는 것이다.
  • 즉, 상속을 받게 되면 부모의 공간이 먼저 만들어지고(부모생성자 호출) 자식의 공간이 만들어지는 것(자식 생성자 호출)이다.

  • UML 다이어그램에서 상속관계는 화살표로 표시한다.

image

오버라이딩

  • 메소드 오버라이딩은 상속관계에 있을 때 부모클래스 메소드의 내용부를 다르게 해서 사용하는 것이다.
  • 부모 클래스의 메소드를 재정의 할때는 @Override어노테이션을 붙인다.
  • 메소드 선언부분에서 접근 제한자 부분은 다를 수 있다.
  • 단, 하위 클래스의 접근 제한자가 상위클래스의 접근 제한자보다 좁으면 안된다.

JAVA TIP

  • 숫자를 3자리씩 끊어서 코드를 짜고 싶을 때 _를 사용할 수 있다.
  • 예 : 1_344_000 (코드) => 1344000 (출력)

  • 클래스 명 변경할 때 단축키 : F2

  • [source - Generate Constructor from Superclass] : 상속받은 생성자 만들기
  • [source - Generate Constructor using field] : 매개변수 있는 생성자 자동으로 만들기