위에서 쓴 것 처럼 클래스를 재사용하기 위해서 쓰는게 상속이다.
잘 쓰여진 클래스가 있을 때 그 클래스를 약간 수정하여 사용하고 싶을 수 있다. 이때 모든 코드를 그대로 따라 쓰기에는 손이 아프고 그대로 사용하기에는 수정하고 싶은 부분이 있을 수 있기에 이때 사용 하는 것이 상속이다.
잘 쓰여진 클래스. 즉, 물려받고 싶은 클래스를 부모클래스 또는
슈퍼클래스라고도 부른다.
슈퍼클래스를 물려받는 클래스를 자식 클래스 또는
서브클래스라고 부른다.
상속을 사용하고 싶을 때는 아래와 같이 적을 수 있다.
(Parent class : 슈퍼클래스 / Child class : 서브클래스)
class Parent {
}
class Child extends Parent{
}
서브 클래스 옆에 extedns 와 함께 물려받고 싶은 슈퍼클래스를 적어준다.
extedns는 확장이라는 뜻인데 어째서 상속이라는 뜻의 단어가 아닌 확장이라는 단어를 사용하였을까?
서브 클래스 자체가 슈퍼클래스의 모든것을 물려받고 추가적으로 필드를 작성하거나 수정을 하기에 슈퍼클래스를 포함하여 더 큰 내용을 담고있기 때문이다. (슈퍼클래스의 확장판 느낌!)
위 코드에서 기본생성자는 다음과 같다.
👉 위 순서를 살펴보면 슈퍼클래스의 필드를 먼저 생성하기 때문에 서브클래스 생성자를 만들 때 꼭 첫번째 줄에 super()를 먼저 작성해야 한다!!
슈퍼클래스에서 이미 만들어진 기능이 있지만 내용을 수정해서 사용하고 싶을 때 (없는 것을 추가하는 것이 아님!) 오버라이드를 사용한다.
메서드 오버라이딩은 오버로딩과 다르게 반환형, 함수이름, 매개변수의 형태와 개수까지 모두 일치해야 한다.
※ 상속받은 메서드의 접근제한자는 범위를 줄일 수 없다. (늘리는 건 가능)
※ 오버라이드를 하고싶은 메서드에 final이 붙어있을 경우 오버라이드는 불가능하다.
오버라이딩 규칙은 복잡하며 규칙에 부합하지 않을 시 에러가 발생한다. 이러한 에러를 방지하기 위해 오버라이딩하는 메서드 위에
@Override 를 적어주는 것이 좋다.
적어준 뒤 규칙에 맞지 않을 때에는 경고를 보내고 위 메서드는 실행되지 않는다.