티스토리 뷰

IT/JAVA

메소드 오버라이딩

긍정탁 2017. 7. 13. 10:18

 - 슈퍼 클래스의 메소드를 서브 클래스에서 재정의하는 것

    ○슈퍼 클래스의 메소드 이름, 메소드 인자 타입및 개수 , 리턴 타입등 모든것 동일하게 정의

 

- 부모가 갖고있는 메소드를 똑같이 적용 !

 

예시를 들어보자

 

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
 
class Animal{
    String name;
    public void makeSound()
    {
        System.out.println("소리를 낸다");
    }
}
 
 
class Dog extends Animal{
    String kind;
    public void makeSound(){   //메소드 오버라이딩을 한다.
        System.out.println("멍멍 하고 소리를 낸다 ");
    }
}
class Cat extends Animal{
    public void makeSound(){   //메소드 오버라이딩을 한다.
        System.out.println("야옹 하고 소리를 낸다 ");
    }
}
public class AnimalTest {
    public static void main(String[] args)
    {
      Animal a = new Animal(); //부모객체 생성
      System.out.print("a.makeSound(); = ");
      a.makeSound(); 
     
      Dog d = new Dog();
      System.out.print("d.makeSound(); = ");
      d.makeSound();   // 부모인것을 실행할것인가? 자식것을 실행할것인가 ? 
        
      Animal b = new Dog();  //레퍼런스는 부모이고 객체자체는 자식인 경우
      System.out.print("b.makeSound(); = ");
      b.makeSound();
    }
}
 
cs

 

31라인에서 d.makeSound(); 을 할경우, 부모 Animal 클래스에서 System.out.println("소리를 낸다"); 이것이 실행될까 ?

 

그렇지 않다.  동적 바인딩 발생이 발생하여  System.out.println("멍멍 하고 소리를 낸다 "); 이것이 실행된다.

동적 바인딩 이란? 오버라이딩 된 메소드가 무조건 실행되도록 함

 결국 부모 클래스를 무시하고 지정된 자식 클래스에 오버라이딩 된 부분을 실행 한다는 것이다.

 

35라인에서 레퍼런스는 부모이고 객체자체는 자식인 경우는 어떨까 ?

이 부분 역시 자식 클래스 안에 있는 메소드가 호출된다.

 

출력 화면

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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