Link
11-28 22:35
«   2020/11   »
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          
Archives
Today
1,619
Total
1,176,191
관리 메뉴

꿈 많은 사람의 이야기

자바 상속과 오버라이딩, super 본문

java

자바 상속과 오버라이딩, super

이수진의 블로그 이수진의 블로그 2017. 8. 16. 08:35

상속이란, 하위 클래스(자식 클래스)가 상위 클래스(부모 클래스)의 멤버를 사용할 수 있는 것이다. 즉 부모는 자식에게 자신의 멤버를 제공해준다.

 

자식은 부모에게 상속 받은것 + 자신의 것을 사용할 수 있다.

상속은 클래스를 재사용하기 때문에 코드의 중복을 줄여준다. 또한 개발의 시간을 단축시킬 수 있어 매우 유용하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
class A
{
    int a = 0;
    public void method1()
    {
        
    }
}
 
class B extends A
{
    public void method1()  //부모 메소드 사용
    {
        a = 5;// 부모 필드 변수 사용
    }
    //부모의 메소드를 자식이 재정의함 -> 오버라이딩
}
 
Colored by Color Scripter

위 예제는 간단한 상속 예제를 보여준다.
B는 A라는 클래스를 선택하여 상속을 한다. 상속을 하기 위해선 클래스 이름 옆에 extends라는 키워드를 붙이고 상속할 클래스를 쓴다.

B클래스는 A클래스에서 정의된 메소드를 오버라이딩(overriding)했으며 해당 메소드 안에 부모의 필드 변수 a를 사용했다.

오버라이딩이란 상위 클래스에서 사용한 메소드를 자식이 사용하는데 그 메소드 내용을 재정의 하는 것이다. 즉 자식 클래스 내용에 맞게 수정한다. 
메소드가 오버라이딩 되었다면 부모 객체의 메소드는 숨겨지기 때문에 자식 객체에서 메소드를 호출하면 오버라이딩된 자식 메소드가 호출 된다.


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
 
class A
{
    int a = 0;
    public void method1()
    {
        System.out.println("부모!");
    }
}
 
class B extends A
{
    
    B() // 생성자  main의 new B()로 인해 이 생성자가 실행됨
    {
        method1();
        method2();
    }
    public void method1()  //부모 메소드 사용
    {
        a = 5;// 부모 필드 변수 사용
        System.out.println("자식");
    }
    //부모의 메소드를 자식이 재정의함 -> 오버라이딩
    
    public void method2()
    {
        method1();
        super.method1();
    }
    public static void main(String args[])
    {
        new B();  //본인 클래스 호출
    }
}
 
Colored by Color Scripter

위 예제는 오버라이딩한 메소드를 보여주는 예제이다.
결과를 보면 
자식
자식
부모
가 나오게 된다.
B는 A의 메소드를 오버라이딩 했기 때문에 A의 값이 덮어 씌어지기 때문이다. 처음에 main이 시작하면 본인 클래스 객체를 생성한다. 그러면 생성자가 실행이 되는데 생성자에선 method1()과 method2()를 호출한다.

method1()을 호출하면 자식 이라는 것이 print되어진다.
method2()를 호출하면 method1()을 그냥 호출한다. 그냥 호출하면 본인 클래스의 method1()을 호출한다. 본인 클래스(B 클래스) method1()은 이미 오버라이딩 되어 있기 때문에 자식 이 출력된다.

여기서 super키워드가 나오는데 super키워드는 부모를 호출하는 키워드이다. super.method1()을 하게 되면 부모의 메소드를 호출하기 때문에 부모가 나오게 된다.



0 Comments
댓글쓰기 폼