1. 상속
- 객체지향의 재활용성을 극대화시킨 프로그래밍 기법
- 객체의 필드(변수)와 메소드를 다른 객체가 물려 받을 수 있는 기능
- 소스 변경 문제 또는 불필요한 기능 포함될 수도 있기 때문에 생김
- 부모 클래스 / 상위(super) 클래스 / 기초(base) 클래스
- 자식 클래스 / 하위(sub) 클래스 / 유도(derived) 클래스
- 재활용성과 중복 제거, 유지보수 편리
- 상속받은 클래스를 다시 상속 받을 수 있음
- 복잡도가 증가됨
- extends 사용
class MultiplicationableCalculator extends Calculator {
public void multiplication() {
System.out.println(this.left * this.right);
}
}
public class CalculatorDemo2 {
public static void main(String[] args) {
MultiplicationableCalculator c1 = new MultiplicationableCalculator();
c1.setOprands(10, 20);
c1.sum();
c1.avg();
c1.multiplication();
}
}
2. 상속과 생성자
- 매개변수가 있는 생성자가 있을 때는 자동으로 기본 생성자를 만들어주지 않음 (매개변수 없으면 자동으로 기본 생성자 만듦)
package org.opentutorials.javatutorials.Inheritance.example4;
public class ConstructorDemo {
public ConstructorDemo(){}
public ConstructorDemo(int param1) {}
public static void main(String[] args) {
ConstructorDemo c = new ConstructorDemo();
}
}
- 하위 클래스가 호출될 때 자동으로 상위 클래스의 기본 생성자를 호출
- 상위 클래스에 매개변수가 있는 생성자가 있다면 자바는 자동으로 상위 클래스의 기본 생성자를 만들어주지 않음
=> 존재하지 않는 생성자를 호출하게 되기 때문에 에러가 발생
==> 아래와 같이 상위 클래스에 기본 생성자를 추가
class Calculator {
int left, right;
public Calculator(){
}
public Calculator(int left, int right){
this.left = left;
this.right = right;
}
}
class SubstractionableCalculator extends Calculator {
public SubstractionableCalculator(int left, int right) {
this.left = left;
this.right = right;
}
public void substract() {
System.out.println(this.left - this.right);
}
}
- super: 상위 클래스를 가리키는 키워드 (부모 클래스를 의미)
- super(): 부모 클래스의 생성자를 의미
- 부모 클래스의 기본 생성자가 없어져도 오류가 발생하지 않음
- 하위 클래스의 생성자에서 super를 사용할 때 주의할 점은 super가 가장 먼저 나타나야함
=> 부모가 초기화되기 전에 자식이 초기화되는 일을 방지하기 위한 정책
class Calculator {
int left, right;
public Calculator(){}
public Calculator(int left, int right){
this.left = left;
this.right = right;
}
}
class SubstractionableCalculator extends Calculator {
public SubstractionableCalculator(int left, int right) {
super(left, right);
}
public void substract() {
System.out.println(this.left - this.right);
}
}
