티스토리 뷰

반응형

상속

 

객체 지향 언어에서 상속이란 상위 클래스에 존재하는 멤버를 하위 클래스로 그대로 물려 받는 것을 의미합니다. 물려 받는다는 개념보다는 재사용 + 확장의 의미로 생각하는게 더 편할 수 있습니다. 상속은 다음과 같은 특징을 가집니다.

 

하위 클래스에서 상위 클래스를 상속받고자 한다면 클래스 정의 후 extends 사용

하위 클래스는 여러 개의 상위 클래스를 상속 받을 수 없음 (다중 상속 허용 X)

하위 클래스는 상위 클래스의 내용을 재사용이 가능하고 내용을 확장 시킬 수있음

상위 클래스는 여러개의 하위 클래스를 가질 수 있음

상위 클래스와 하위 클래스에 같은 이름의 멤버 변수나 메서드가 존재 할 경우 상위 클래스의 내용은 감춰 짐

 

실제 예제를 통해서 구체적으로 살펴 보겠습니다.

 

 

예제 코드

 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package study;
 
public class HighRankClass {
    
    public int num =10 ;
    public static String st ="Static!!";
    
    public void show()
    {
        System.out.println("하위 클래스에서 재사용가능");
    }
    
    public void show2()
    {
        System.out.println("상위 클래스 내용");
    }
 
}
 

상위 클래스에 해당하는 HighRankClass.class 입니다.  

num 변수와 st변수 그리고 show() 메서드는 하위에서 재사용되는 멤버입니다.

show2()는 하위 클래스에서 동일한 이름으로 구현 될 메서드로 하위 클래스에

의해 가려지게 되는 것을 보여주기 위한 메서드 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package study;
 
public class LowRankClass1 extends HighRankClass {
    
    public void show2()
    {
        System.out.println("하위클래스1의 내용");
    }
    
    public void show3()
    {
        System.out.println("class1의 확장된 내용입니다");
    }
 
}
 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package study;
 
public class LowRankClass2 extends HighRankClass{
    
    public void show2()
    {
        System.out.println("하위 클래스2의 내용");
    }
    public void show3()
    {
        System.out.println("class2의 확장된 내용입니다");
    }
}
 

HighRankClass를 상속받는 하위 클래스인 클래스들입니다. 

[extends 클래스명]을 통해 HighRankClass를 상속 받습니다.

 

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
package study;
 
public class Main {
    
    public static void main(String argsp[])
    {
        LowRankClass1 class1 = new LowRankClass1();
        LowRankClass2 class2 = new LowRankClass2();
        
        //재사용 
        class1.show();
        class2.show();
        
        System.out.println(class1.num);
        System.out.println(class2.num);
        
        System.out.println(class1.st);
        System.out.println(class2.st);
        
        //상위 클래스 내용 가려짐
        class1.show2();
        class2.show2();
        
        //확장
        class1.show3();
        class2.show3();
        
    }
 
}
 

main 영역 입니다.

 

 

21~22Line의 결과를 보면 동일한 이름의 메서드에 대해서 상위 클래스의 내용이

아닌 하위 클래스의 내용이 출력 되는 것을 확인 할 수 있습니다. 

반응형