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라고 할만하다.