다양한 종류의 상속
배우기
21 상속
다양한 종류의 상속

생각을 조금 더 말랑말랑하게 하기 위해서 Calculator을 상속 받는 클래스를 하나 더 만들어보자. 이 클래스는 곱하기를 할 수 있는 클래스다.

spackage org.opentutorials.javatutorials.Inheritance.example1;
 
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();
    }
 
}

결과는 아래와 같다.

30
15
200

그럼 상속한 클래스를 다시 상속할 수 있을까? 물론 가능하다. 아래의 예제는 곱하기가 가능한 클래스인 MultiplicationableCalculator을 상속받고 있다.

package org.opentutorials.javatutorials.Inheritance.example1;
 
class DivisionableCalculator extends MultiplicationableCalculator {
    public void division() {
        System.out.println(this.left / this.right);
    }
}
 
public class CalculatorDemo3 {
 
    public static void main(String[] args) {
 
        DivisionableCalculator c1 = new DivisionableCalculator();
        c1.setOprands(10, 20);
        c1.sum();
        c1.avg();
        c1.multiplication();
        c1.division();
    }
 
}

이것이 상속의 기본적인 개념이다. 어렵지 않다. 하지만 장점이 있으면 단점도 있는 법이다. 프로그래밍의 세계에서는 이 상속의 효용을 수용하기 위해서 꽤나 많은 대가를 치러야 했다. 그 대가를 한마디로 표현하자면 복잡도의 증가라고 이야기할 수 있을 것이다. 객체지향을 두 개의 시즌으로 나눈다면 클래스와 인스턴스에 대한 이해가 시즌1이라면 상속은 객체지향 내에서의 시즌2라고 할만하다. 

실습 내용

실행결과

30
15
200
0

다음 예제 코드는 Calculator 클래스를 MultiplicationableCalculator 클래스가 상속받고 MultiplicationableCalculator 클래스를 DivisionableCalculator 클래스가 다시 상속받고 있다.

사실 곱하기와 나누기 기능이 있는 클래스를 따로 만들지 않고 Calculator 클래스를 상속받아도 되지만 상속한 클래스를 다시 상속할 수 있다는 점을 보여주기 위해 다음과 같이 만들었다.

질문하기
추가 자료
no files uploaded

추가 자료가 없습니다

여기서 새로운 학습 자료를 확인하세요!
선생님이 추가한 자료들을 바로 확인할 수 있어요.