-
클래스의 상속(inheritance)백엔드/자바 2020. 7. 28. 01:23
상속이란?
기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 말함.
더 간단히 말해 두 클래스는 부모와 자식 관계로 맺어주는 것을 말함.
상속은 캡슐화, 은닉화와 더불어 객체지향프로그래밍을 구성하는 중요 요소 중 하나.
그림으로 간단히 나타내면 다음과같다.
상속의 장점
클래스 상속은 다음과 같은 특징을 갖는다.
- 자식 클래스는 부모 클래스의 모든 멤버(클래스 내 메서드, 변수)를 상속받는다.
- 단, 초기화 블록과 생성자는 상속받지 않는다.
- 결과적으로 모든 자식 클래스는 부모 클래스보다 같거나 더 많은 멤버를 가진다.
- 자손을 아무리 변경해도 조상에 영향을 주지 않는다. 반대로 부모는 자식에게 영향을 준다.
- 하나의 부모는 여러 자식 클래스를 거느릴 수 있지만, 반대로 자식은 여러 부모 클래스를 거느릴 수 없다.
- 부모 클래스의 접근제어자가 private, default일 경우 자식 클래스는 상속은 가능하나 접근은 불가하다.
상속 구현해보기
상속을 구현하는 건 어렵지 않다.
자식 클래스의 클래스명 뒤에 "extends + 부모 클래스명"을 입력해주기만하면 된다.
부모 클래스의 코드
class Parents{ String name; Parents(){} }
자식 클래스의 코드
class Son extends Parents{ int age; Son(String name, int age) { this.name = name; this.age = age; } public String call_name() { return super.name; } }
실행해보기
public class Test { public static void main(String[] args) { Son person1 = new Son("손흥민", 15); System.out.println(person1.name); System.out.println(person1.call_name()); } }
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있다.
Son클래스는 Parents의 클래스를 상속받았기 때문에 부모가 가진 name 변수를 이용할 수 있었다.
이때 주의할 점은 this.name은 현재 Son클래스가 별도의 name변수가 없기 때문에 부모것을 쓴 것이다.
만약 Son클래스가 name이라는 변수를 가지고 있었다면, this.name은 Son클래스의 name변수를 가리킨다.
상속 주의점
- 상속한 뒤 자식 클래스에서 부모 멤버나 메서드의 새로운 선언(오버라이딩)이 없을 때는 그것은 그냥 부모 클래스의 것을 빌려쓰게 되는 것이다.
- 이때는 부모 클래스의 수가 변하면 자식 클래스에서 참조한 변수도 바뀌기 때문에 주의 해야 한다.
- 즉 초기화, 재정의 없이는 자식 클래스가 상속받은 멤버, 메서드는 내것이 되지 않는 것이다.
'백엔드 > 자바' 카테고리의 다른 글
클래스 / 메소드 오버라이딩(method overriding) (0) 2020.07.28 클래스의 super와 super() (1) 2020.07.28 초기화 (0) 2020.07.27 메서드(method)에 대해서 (0) 2020.07.27 필드와 변수(field & Variable) (0) 2020.07.27