상속

호떡·2022년 7월 24일
0

상속 특징


✍관련 강의: 자바_Day2 상속 (StudentTest.java)


자식 클래스는 부모 클래스의 멤버변수, 메소드를 자신의 것처럼 사용할 수 있다. (단, 접근 제한자에 따라 사용여부가 달라질 수 있다.)

super()

  • 자식 객체를 생성하면, 부모 객체가 먼저 생성되고 자식 객체가 그 다음에 생성된다. 모든 객체는 클래스의 생성자를 호출해야만 생성되는데, 부모 생성자는 어디서, 어떻게 호출된 것일까? 부모 생성자는 자식 생성자의 맨 첫 줄에서 호출된다. super()는 부모의 기본 생성자를 호출한다.
  • super(매개값, ... )는 매개값의 타입과 일치하는 부모 생성자를 호출한다. 만약 매개값의 타입과 일치하는 부모 생성자가 없을 경우 컴파일 오류가 발생한다. super(매개값, ... )가 생략되면 컴파일러에 의해 super()가 자동적으로 추가되기 때문에 부모의 기본 생성자가 존재해야 한다. 부모 클래스에 기본 생성자가 없고 매개 변수가 있는 생성자만 있다면 자식 생성자에서 반드시 부모 생성자 호출을 위해 super(매개값, ... )를 명시적으로 호출해야 한다.
    💡(생성자 파트) 명시적으로 선언한 생성자가 한 개라도 있으면, 컴파일러는 기본 생성자를 추가하지 않는다. 따라서 이후에 기본생성자가 필요할 것으로 예상되면, 기본 생성자를 추가적으로 선언해주어야 한다.

메소드 재정의 (Override)

  • 자식 클래스에서 동일한 메소드를 재정의하는 것이다. 부모의 메소드와 동일한 시그니처(리턴 타입, 메소드 이름, 매개 변수 타입/개수/순서)를 가져야 한다.
  • 이 때 부모 객체의 메소드는 숨겨지는 효과가 발생하여, 자식 객체에서 메소드를 호출하면 재정의된 자식 메소드가 호출된다. 👉다형성2
  • @Override : 메소드가 제대로 오버라이딩 되었는지 컴파일러에게 확인 부탁하는 '주석'
  • 하위 클래스의 접근제어자 범위가 상위 클래스보다 크거나 같아야 한다. 즉 부모가 오픈을 했는데, 자식은 감출 수 없다.
  • 오버로딩과 오버라이딩은 다르다!!!

0개의 댓글