제 11장. 상속(inheritance)
상속(inheritance)
이전에 만든 클래스와 닮았지만, 일부 다른 클래스를 만들 필요가 있을 경우 사용한다.
상속(inheritance)이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다.
상속받는 클래스를 자식 클래스, 하위 클래스 또는 서브 클래스라고 부른다.
상속을 해주는 클래스를 부모 클래스, 상위 클래스 또는 슈퍼 클래스라고 한다.
상속할 수 있는 대상
자식 클래스가 부모 클래스로부터 상속을 받게 되면 부모 클래스의 필드와 메서드를 물려받게 된다.
단, 접근제어자가 private을 갖는 필드나 메소드는 상속이 불가하고, 패키지가 다를 경우 접근제어자가 default인 경우도 상속이 불가하다.
상속은 왜 사용하는가?
중복된 코드를 줄일 수 있고, 유지 보수가 편리하며, 통일성이 있고 다형성을 구현할 수 있다.
상속의 선언 방법(extends)
public class SuperHero extends Hero {}
//SuperHero = 서브 클래스
//Hero = 슈퍼 클래스
<상속관계의 표현 방법>
보통 화살표의 방향을 반대로 생각할 수 있는데 상속같은 경우는 위 그림과 같다.
오버라이드(override)
코드에 @(어노테이션 주석 = 클래스와 JVM이 보는 주석)를 치면 오버라이드 할 수있는 method를 선택해줄 수 있다.
상속을 금지하는 방법.
클래스에 final을 추가해주면 그 클래스는 상속을 받을 수 없다.
위의 사진과 같이 빨간줄이 뜨면서 오류가 나고 있는것을 확인 해 줄수 있다.
상속을 해주었으면 기존 내용에서 추가 혹은 수정을 해서 서브 클래스를 사용해 줄 수 있는데
public class Student {
String name;
public void study() {
System.out.println(this.name + "은 공부중이다");
}
}
처럼 원하는 메소드를 사용하고 싶으면 위와 같이 원하는 메소드를 작성하고 enter만 눌러주면
public class SuperStudent extends Student {
@Override
public void study() {
super.study(); //이 때 super.을 사용하는데 이는 내측 인스턴스의 멤버에
// 접근하게 해준다.
}
}
이렇게 코드가 작성이 된다.
여기서 코드를 수정하거나 추가해주는 방식으로 상속을 사용해주면 된다.
코드를 확인해보면 노란색 o부분처럼 표시가 되는데 이를 클릭해보면 해당 클래스의 메소드로 이동하는 것을 확인 할 수 있다.
올바른 상속
올바른 상속은 "is-a 원칙"이라고 하는 규칙에 따른 상속을 말한다.
SuperStudent is a Student(SuperStudent는 Student의 한 종류이다)
잘못된 상속
잘못된 상속은 "is-a 관계가 되지 않는 상속이다
ex) SuperStudent is a Fruit(SuperStudent는 과일의 한 종류이다)
예시처럼 말이되지 않는 것을 확인 할 수 있는데 이것이 잘못된 상속이다.
잘못된 상속을 하면 안되는 이유
1. 클래스를 확장할 때 현실세계와의 모순이 생긴다.
2. 객체 지향의 3대 특징 중 1가지 " 다형성"을 이용할 수 없게 된다.(위의 예시같은 것)
쉽게 말해서 상속에서 서브 클래스일수록 구체화 되고 슈퍼 클래스일수록 추상적인 것으로 일반화된다.
Author And Source
이 문제에 관하여(제 11장. 상속(inheritance)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dongyunhan/제-11장.-상속inheritance저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)