자바 상속




안녕하세요 열코입니다.

상속은 객체지향 프로그래밍의 중요한 기능중 하나입니다.


주요 용어

- Super Class : 기능이 상속 된 클래스 (기본, 상위 클래스)


- Sub Class : 다른 클래스를 상속하는 클래스(파생, 하위 클래스)

서브 클래스는 수퍼 클래스 필드와 메소드 외에도 자체 필드와 메소드를 추가 할 수 있습니다.


- Reusability : 재사용성

새로운 클래스를 만들 때 상위 클래스에 이미 포함된 코드를 새 클래스에 파생시켜 재사용합니다.



상속을 사용하기 위해 extends 키워드를 사용합니다.

예)


1
2
3
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)

단일 상속에서 하위 클래스는 수퍼 클래스의 기능을 상속받습니다.

위 그림에서 부모클래스는 자식클래스의 기본 클래스로 사용됩니다.


2. 다중 레벨 상속(Multilevel Inheritance)

다중 레벨 상속에서 파생클래스는 기본 클래스를 상속하며 파생 클래스도 다른 클래스의 기본 클래스로 작동합니다.

자바에서 자식클래스가 조부모 클래스의 멤버에 직접 접근할 수 없습니다.(해당 참고자료)


3. 계층적 상속(Hierarchical Inhreitance)

계층적 상속은 하나의 클래스에서 둘 이상의 하위 클래스를 상속하는것을 말합니다.


4. 다중 상속(Multiple Inheritance)

하나이상의 수퍼클래스를 가지는것을 다중상속이라고합니다.

원래 자바에서는 다중상속을 지원하지는 않지만 인터페이스를 통해 구현이 가능합니다.


5. 하이브리드 상속(Hybrid Inheritance)

하이브리드 상속 역시 다중상속에 포함되기 때문에 자바에서 지원하지 않지만

인터페이스를 통해 구현 가능합니다.


자바 상속 관련

- 수퍼 클래스 : 수퍼 클래스가 없는 Object 클래스를 제외한 모든 클래스에는 하나의 수퍼클래스가 존재합니다.

다른 명시적 수퍼클래스가 없으면 암시적으로 Object 클래스의 서브 클래스입니다.

- 수퍼클래스는 하나만 존재 : 수퍼클래스는 여러개의 하위 클래스를 가질 수 있지만

하위 클래스는 하나의 수퍼클래스만 가질 수 있습니다. 이는 자바가 클래스와 함께 다중상속을 지원하지 않기 때문입니다.

위에서 설명했듯이 인터페이스를 통해 다중상속을 구현할 수 있습니다.

- 생성자 : 하위 클래스는 수퍼클래스의 모든 멤버를 상속합니다.

생성자는 멤버가 아니기 때문에 상속되지 않지만 super() 키워드를 통해 하위 클래스에서 호출 가능합니다.


하위 클래스 관련

- 상속된 필드는 다른 필드와 마찬가지로 직접 사용될 수 있습니다.

- 수퍼클래스에 없는 새 클래스를 서브클래스에 선언할 수 있습니다.

- 수퍼클래스에 없는 새 메소드를 서브클래스에 선언할 수 있습니다.

- 수퍼클래스에 있는 동일한 이름을 가진 메소드를 작성하여 오버라이드할 수 있습니다.

- 수퍼클래스에 있는 이름과 같은 새로운 static 메소드를 만들어 숨길 수 있습니다.



이상 '자바 상속'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.






to Top