안녕하세요 열코입니다.
상속은 객체지향 프로그래밍의 중요한 기능중 하나입니다.
주요 용어
- Super Class : 기능이 상속 된 클래스 (기본, 상위 클래스)
- Sub Class : 다른 클래스를 상속하는 클래스(파생, 하위 클래스)
서브 클래스는 수퍼 클래스 필드와 메소드 외에도 자체 필드와 메소드를 추가 할 수 있습니다.
- Reusability : 재사용성
새로운 클래스를 만들 때 상위 클래스에 이미 포함된 코드를 새 클래스에 파생시켜 재사용합니다.
상속을 사용하기 위해 extends 키워드를 사용합니다.
예)
| class child extends parent { // methods and fields } | cs |
상속의 구체적인 설명을 위해 예제 코드를 통해 알아보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | public class Main { public static void main(String[] args) { Child c = new Child(5); c.up(); c.up(); c.print(); } } class Parent { protected static int a; public Parent(int get) { a = get; } public void up() { a++; } public void down() { a--; } public void print() { System.out.println(a); } } class Child extends Parent { private int b; public Child(int get) { super(a); a = get; b = get + 5; } public void print() { System.out.println(a + ", " + b); } } | cs |
위 프로그램에서 상속하는 동안 수퍼클래스가 아닌 하위클래스 객체만 생성됩니다.
Child 클래스의 객체가 만들어지면 수퍼클래스의 모든 메소드와 필드의 복사본을 Child 객체의 메모리로 가져옵니다.
그래서 하위 클래스의 객체에서 수퍼클래스의 멤버에 접근할 수 있습니다.
자바에서는 여러가지 상속 유형을 지원합니다.
1. 단일 상속(Single Inheritance)
![](https://t1.daumcdn.net/cfile/tistory/99FB8E4A5BC552E107)
단일 상속에서 하위 클래스는 수퍼 클래스의 기능을 상속받습니다.
위 그림에서 부모클래스는 자식클래스의 기본 클래스로 사용됩니다.
2. 다중 레벨 상속(Multilevel Inheritance)
![](https://t1.daumcdn.net/cfile/tistory/99D7CF4A5BC552E139)
다중 레벨 상속에서 파생클래스는 기본 클래스를 상속하며 파생 클래스도 다른 클래스의 기본 클래스로 작동합니다.
자바에서 자식클래스가 조부모 클래스의 멤버에 직접 접근할 수 없습니다.(해당 참고자료)
3. 계층적 상속(Hierarchical Inhreitance)
![](https://t1.daumcdn.net/cfile/tistory/991C7A4A5BC552E005)
계층적 상속은 하나의 클래스에서 둘 이상의 하위 클래스를 상속하는것을 말합니다.
4. 다중 상속(Multiple Inheritance)
![](https://t1.daumcdn.net/cfile/tistory/9937454A5BC552E103)
하나이상의 수퍼클래스를 가지는것을 다중상속이라고합니다.
원래 자바에서는 다중상속을 지원하지는 않지만 인터페이스를 통해 구현이 가능합니다.
5. 하이브리드 상속(Hybrid Inheritance)
![](https://t1.daumcdn.net/cfile/tistory/994C294A5BC552E031)
하이브리드 상속 역시 다중상속에 포함되기 때문에 자바에서 지원하지 않지만
인터페이스를 통해 구현 가능합니다.
자바 상속 관련
- 수퍼 클래스 : 수퍼 클래스가 없는 Object 클래스를 제외한 모든 클래스에는 하나의 수퍼클래스가 존재합니다.
다른 명시적 수퍼클래스가 없으면 암시적으로 Object 클래스의 서브 클래스입니다.
- 수퍼클래스는 하나만 존재 : 수퍼클래스는 여러개의 하위 클래스를 가질 수 있지만
하위 클래스는 하나의 수퍼클래스만 가질 수 있습니다. 이는 자바가 클래스와 함께 다중상속을 지원하지 않기 때문입니다.
위에서 설명했듯이 인터페이스를 통해 다중상속을 구현할 수 있습니다.
- 생성자 : 하위 클래스는 수퍼클래스의 모든 멤버를 상속합니다.
생성자는 멤버가 아니기 때문에 상속되지 않지만 super() 키워드를 통해 하위 클래스에서 호출 가능합니다.
하위 클래스 관련
- 상속된 필드는 다른 필드와 마찬가지로 직접 사용될 수 있습니다.
- 수퍼클래스에 없는 새 클래스를 서브클래스에 선언할 수 있습니다.
- 수퍼클래스에 없는 새 메소드를 서브클래스에 선언할 수 있습니다.
- 수퍼클래스에 있는 동일한 이름을 가진 메소드를 작성하여 오버라이드할 수 있습니다.
- 수퍼클래스에 있는 이름과 같은 새로운 static 메소드를 만들어 숨길 수 있습니다.
이상 '자바 상속'에 대해 알아보았습니다.
질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!
공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.