상속성은 프로그래밍에서 보안, 유지보수에 있어 장점이 있기 때문에
자바에서 흔히 사용된다.
특히 클래스간 상하관계 (Is-a) 가 형성되어 있을 시
하위 클래스가 상위 클래스의 속성들을 상속 받으면서 쉽게 미리 정의된 메서드들을 이용한다 든가
선언된 변수들을 인스턴스에 지닐 수 있게 된다.
이때 상속을 위해서는 하위 클래스 선언 후 extends 상위 클래스를 작성해 주면 된다.
ex) VipCustomer vip extends Customer(){ }
(하위클래스) (상위클래스)
extends에서 알 수 있듯이 보통 상속된 클래스들은 상위 클래스 일수록 공통된 성질들을 내포하고
하위 클래스일수록 그 상위 클래스의 성질들을 확장(구체화) 한다.
따라서, 가령 예에서 쓰인 구문에서는 보통 이러한 관계를 나타낼 것이다.
- Customer는 고객을 나타내고 각 고객별 등급이 있다.
- Customer 객체에는 등급별 다른 성질을 제외하고 이름, 고객번호 등의 공통된 변수들이 포함된다.
( 게터,세터 등 일반적인 메서드들도 포함)
- Vip 등급에는 할인율, 보너스 적립률 등 등급별 구체적인 변수들을 추가할 수 있다.
(Vip 만의 가격 계산과 같은 새로운 메서드들도 구현할 수 있다)
그렇다면 생성자의 경우 무슨 차이가 있을까?
일단 상위클래스의 경우 일반적으로 알고있는 그대로 이고,
하위 클래스의 경우에는 생성자를 호출하면 제일 먼저 상위클래스의 생성자가 먼저 호출된다.
상속되는 내용들이 생성되고 나서 나머지 하위 클래스만의 인스턴스가 생성된다.
이는 사실 컴파일러가 하위클래스의 생성자 부분에 자동으로 super(); 라고 상위클래스의 생성자 호출을 진행하기 때문이다.
그러나 만일 상위 클래스에서의 생성자가 디폴트가 아니라 다른 매개변수를 받아 생성하는 오버로딩이 진행되었다면,
반드시! 하위클래스의 생성자 제일 첫부분에 super(매개변수);를 호출하고나서 다음 인스턴스 설정을 완료해줘야한다.
super호출로 인스턴스를 만들어 놓지 않고선 먼저 다른 변수,메서드(하위 클래스에만 있는것들)을 담는 객체가 없기 때문이다!
만약 보안을 위해 상위 클래스의 내용들이 private이었다면,
하위 클래스가 상위 클래스의 메서드나 변수들을 사용하기 매우 까다롭다. 이때 private 말고 protected로 선언해 주면
다른 외부 패키지와 클래스에서는 접근이 제한되지만 상속 관계에 있는 클래스에서는 자유롭게 사용이 가능하다!
다음 글에서는 상속 클래스들 사이에서 메서드 오버라이딩, 다형성, 업과 다운 캐스팅에 대해서 알아보겠다.
'CS 공부 > Java, Spring (재정리)' 카테고리의 다른 글
Spring - DI, IoC (0) | 2021.03.25 |
---|---|
java template 메서드 (0) | 2020.01.02 |
java abstract 클래스, 추상클래스 (0) | 2020.01.02 |
자바 항목에 있는 글들은 (0) | 2020.01.01 |
java 상속성 - 오버라이딩,캐스팅,다형성 (0) | 2020.01.01 |