Inheritance Hierarchy는 상속 계층을 의미한다. 상속이란 부모 클래스와 자식 클래스가 있을 때, 부모 클래스가 가지고 있는 특성과 동작을 자식 클래스가 받아서 사용할 수 있음을 의미한다. 가령, GMainFrame은 JFrame을 상속받아서 만들었기 때문에 JFrame이 가지고 있는 setVisible 또는 setSize와 같은 특성들을 사용할 수 있게 된다. class GMainFrame extends JFrame { }이라고 표현한다.
다시 말해 상속은 부모 클래스와 자식 클래스 간의 관계를 정의하는 것이다. 자식 클래스는 부모 클래스를 상속받아 특성을 사용할 수 있다. 상속을 받는 이유는 위의 예시처럼 이미 만들어져 있는 수많은 코드들을 재사용하고 그것을 사용해 확장을 하기 위해서이다. Java에서 Frame, Button, Menu, MenuBar 등을 사용하기 위해서 JFrame, JButton, JMenu, JMenuBar를 상속받아 사용할 수 있고, 자식 클래스들이 공통으로 가지고 있어야 할 특성들을 부모 클래스로 미리 만들어 놓고 상속받아 사용할 수 있다. 이렇게 되면 부모 클래스의 공통된 특성은 자식 클래스들이 모두 동일하게 가지고 있고, 각각의 자식 클래스들 마다 고유한 특성들을 추가할 수도 있는데 이를 Generalization과 Specialization이라고 한다.
상속은 ‘Is-A-Relation’이라고 한다. 가령, 동물 클래스가 부모 클래스로 존재한다고 하자. 사람 클래스, 강아지 클래스, 고양이 클래스가 있다고 할 때, 사람, 강아지, 고양이는 모두 동물이기 때문에 모두 동물의 자식 클래스이고, ‘사람은 동물이다’, ‘강아지는 동물이다’, ‘고양이는 동물이다’라고 할 수 있다.
언어마다 다를 수 있는데, 자바에서 상속은 다중상속을 지원하지 않고 단일 상속만을 지원한다. 하나의 자식 클래스는 단 하나의 부모 클래스만 상속 받을 수 있다는 의미이다. 그 이유는 여러 부모 클래스에서 같은 이름의 a를 상속받는다고 하면 자식 클래스에서 그 a는 어떤 부모 클래스에서 상속받은 지 모호해지기 때문이다.
이러한 상속은 여러 클래스들을 계층 구조로 만들어 코드를 재사용하고 확장하기 쉽게 만들어주는 개념이다.
Aggregation Hierarchy는 Inheritance Hierarchy와 다른 class 계층 구조이다. Aggregation Hierarchy는 집합 계층이라고 불리고 간단히 설명하면 포함 관계를 의미하고, 그룹화를 하는 느낌이다. 최상위 부모에게 전달하면 밑으로 전달이 되는 특징을 가지고 있다. 가령, 파워포인트의 창을 옮기면, 그 밑에 속해 있는 MenuBar, Menu, Frame등이 같이 움직이게 된다.
즉, 집합 계층은 한 클래스가 다른 클래스를 포함하는 관계를 의미한다. 대표적으로는 Tree구조를 예로 들 수 있다. 집합 계층은 ‘Relation-Has-A’라고 한다. 가령, 자동차 클래스가 있다고 가정해보자. 자동차 클래스 안에는 바퀴 클래스, 엔진 클래스, 핸들 클래스, 좌석 클래스 등등이 있다. 이처럼 클래스가 다른 클래스들을 포함하는 관계를 집합 계층이라고 한다. 집합 계층은 클래스 간의 상호작용을 모델링해서 코드를 간결하게 해줄 수 있다.