상속(2)

MIN·2023년 11월 8일

Java

목록 보기
12/36
post-thumbnail

학원에서 수업한 내용 복습

🍒 상속이란?

  • 값을 재사용하기 위해 쓰는 것 : 변수
  • 코드를 재사용하기 위해 쓰는 것 : 함수
  • 클래스를 재사용하기 위해 쓰는 것 : 상속

위에서 쓴 것 처럼 클래스를 재사용하기 위해서 쓰는게 상속이다.

잘 쓰여진 클래스가 있을 때 그 클래스를 약간 수정하여 사용하고 싶을 수 있다. 이때 모든 코드를 그대로 따라 쓰기에는 손이 아프고 그대로 사용하기에는 수정하고 싶은 부분이 있을 수 있기에 이때 사용 하는 것이 상속이다.

잘 쓰여진 클래스. 즉, 물려받고 싶은 클래스를 부모클래스 또는
슈퍼클래스라고도 부른다.
슈퍼클래스를 물려받는 클래스를 자식 클래스 또는
서브클래스라고 부른다.

상속을 사용하고 싶을 때는 아래와 같이 적을 수 있다.
(Parent class : 슈퍼클래스 / Child class : 서브클래스)

class Parent {

}

class Child extends Parent{

}

서브 클래스 옆에 extedns 와 함께 물려받고 싶은 슈퍼클래스를 적어준다.
extedns는 확장이라는 뜻인데 어째서 상속이라는 뜻의 단어가 아닌 확장이라는 단어를 사용하였을까?

서브 클래스 자체가 슈퍼클래스의 모든것을 물려받고 추가적으로 필드를 작성하거나 수정을 하기에 슈퍼클래스를 포함하여 더 큰 내용을 담고있기 때문이다. (슈퍼클래스의 확장판 느낌!)


🍒 생성자

위 코드에서 기본생성자는 다음과 같다.

  • Parent의 기본 생성자 : Parent( ) { }
  • Child의 기본 생성자 : Child( ) { super( ); }
    ※ super()는 슈퍼클래스 생성자를 호출하는 것이다.

💡 서브클래스의 생성자

  1. 반드시 슈퍼클래스를 생성해야 한다.
  2. 매개변수 형태가 슈퍼클래스 생성자와 일치하지 않아도 된다.

💡 서브클래스가 객체를 생성하는 순서

  1. 서브클래스의 생성자 호출
  2. 서브클래스의 생성자는 내부에서 슈퍼클래스의 생성자 호출
  3. 슈퍼클래스의 생성자는 2가지 작업 수행
    1) 필드와 메서드를 생성할 객체에 연결
    2) 필드에 대한 초기값을 지정하고, 기타 초기작업 수행
    -> 위 작업이 모두 끝나면 다시 서브클래스의 생성자로 돌아간다.

📌 Child ob = new Child(); 객체가 생성되는 순간

  1. 슈퍼 + 서브 클래스 크기 만큼의 메모리 생성
  2. 슈퍼클래스 크기의 메모리 -> 슈퍼클래스의 필드 생성
  3. 서브클래스 크기의 메모리(=나머지) -> 서브클래스의 필드 생성
  4. 생성된 ob객체는 위 2개의 필드를 가리키게 된다.

👉 위 순서를 살펴보면 슈퍼클래스의 필드를 먼저 생성하기 때문에 서브클래스 생성자를 만들 때 꼭 첫번째 줄에 super()를 먼저 작성해야 한다!!


🍒 오버라이드

슈퍼클래스에서 이미 만들어진 기능이 있지만 내용을 수정해서 사용하고 싶을 때 (없는 것을 추가하는 것이 아님!) 오버라이드를 사용한다.

메서드 오버라이딩은 오버로딩과 다르게 반환형, 함수이름, 매개변수의 형태와 개수까지 모두 일치해야 한다.

※ 상속받은 메서드의 접근제한자는 범위를 줄일 수 없다. (늘리는 건 가능)
※ 오버라이드를 하고싶은 메서드에 final이 붙어있을 경우 오버라이드는 불가능하다.

오버라이딩 규칙은 복잡하며 규칙에 부합하지 않을 시 에러가 발생한다. 이러한 에러를 방지하기 위해 오버라이딩하는 메서드 위에
@Override 를 적어주는 것이 좋다.
적어준 뒤 규칙에 맞지 않을 때에는 경고를 보내고 위 메서드는 실행되지 않는다.

profile
기초부터 시작하는 감쟈 ※ 소개글 확인해주세요!! ※

0개의 댓글