생성자에서 오버라이드된 메소드를 호출
아래의 클래스가 있다고 했을 때
Class 하위클래스 {
int i=0;
//생성자
하위클래스() {
i = 10;
}
void display() {
System.out.println(“i = “ + i);
}
}
class 슈퍼클래스 {
//생성자
슈퍼클래스() {
display();
}
Void display() {
System.out.println(“여긴 상위 클래스…”);
}
}
하위클래스의 인스컨스를 NEW 하는 시점에 어떤 결과가 나오는 지를 추측해 보면…
위 클래스에서 상위클래스에서 display()란 메소드를 호출하는데 이 메소드는 하위 클래스에서 재정의(override)한 메소드 인 것을 확인 할 수 있는데 자바에서는 오버라이드된 하위클래스의 display() 메소드가 실행됩니다.
new 하위클래스()를 실행하게 되면 하위클래스의 생성자를 실행하기 전에 상위클래스의 생성자가 실행되므로 결과적으로 하위쿨래스의 display() 함수가 실행되어 “i = 0”으로 나타날 겁니다.
참고로 C++이라면 이 같은 경우 비록 Override 된다고 하더라도 슈퍼클래스의 display()가 호출됩니다
아래의 클래스가 있다고 했을 때
Class 하위클래스 {
int i=0;
//생성자
하위클래스() {
i = 10;
}
void display() {
System.out.println(“i = “ + i);
}
}
class 슈퍼클래스 {
//생성자
슈퍼클래스() {
display();
}
Void display() {
System.out.println(“여긴 상위 클래스…”);
}
}
하위클래스의 인스컨스를 NEW 하는 시점에 어떤 결과가 나오는 지를 추측해 보면…
위 클래스에서 상위클래스에서 display()란 메소드를 호출하는데 이 메소드는 하위 클래스에서 재정의(override)한 메소드 인 것을 확인 할 수 있는데 자바에서는 오버라이드된 하위클래스의 display() 메소드가 실행됩니다.
new 하위클래스()를 실행하게 되면 하위클래스의 생성자를 실행하기 전에 상위클래스의 생성자가 실행되므로 결과적으로 하위쿨래스의 display() 함수가 실행되어 “i = 0”으로 나타날 겁니다.
참고로 C++이라면 이 같은 경우 비록 Override 된다고 하더라도 슈퍼클래스의 display()가 호출됩니다
'Programming > JAVA' 카테고리의 다른 글
윤년 구하는 메소드 (0) | 2008.04.28 |
---|---|
상속관계가 있는 클래스의 배열도 상속? (0) | 2008.04.28 |
C함수 포인터와 자바의 Class&Interface (0) | 2008.04.28 |
Java에서의 Job 스케쥴링 (0) | 2008.04.28 |
임시파일을 만들고 종료 시 삭제 방법 (0) | 2008.04.28 |