티스토리 뷰
- 슈퍼 클래스의 메소드를 서브 클래스에서 재정의하는 것
○슈퍼 클래스의 메소드 이름, 메소드 인자 타입및 개수 , 리턴 타입등 모든것 동일하게 정의
- 부모가 갖고있는 메소드를 똑같이 적용 !
예시를 들어보자
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라인에서 레퍼런스는 부모이고 객체자체는 자식인 경우는 어떨까 ?
이 부분 역시 자식 클래스 안에 있는 메소드가 호출된다.
출력 화면
'IT > JAVA' 카테고리의 다른 글
추상 메소드와 추상 클래스 (0) | 2017.07.13 |
---|---|
[JAVA] 오버로딩을 활용한 두점사이의 거리 구하기 (0) | 2017.07.13 |
[정보올림피아드] 198번 (0) | 2017.07.10 |
[정보올림피아드] 197번 (0) | 2017.07.10 |
메소드 오버로딩 (Method overloading) (0) | 2017.07.10 |
댓글