생성자에서 오버라이드된 메소드를 호출
:namespace
prefix = o ns = "urn:schemas-microsoft-com:office:office" />
아래의 클래스가
있다고 했을 때
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()가 호출됩니다.
[예제]
package onj;
/**
*
* @author OnJ OracleJava Communuty
* 아래 예제에서 i ?
*/
class SuperClass {
SuperClass()
{
display();
}
void display() {
System.out.println("SuperClass...");
}
}
class SubClass extends SuperClass {
int i = 0;
SubClass() {
i = 10;
}
void display() {
System.out.println("i = " + i);
}
}
public class OnjConstructorTest {
public static void main(String[] args) {
SubClass s
= new SubClass();
}
}
[결과]
i = 0
[오프라인 개강예정강좌, 오프라인교육장에 오시면 보다 자세히 배울 수 있습니다.]
오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주간]
[11/25]Spring3.X, MyBatis, Hibernate실무과정
[12/02]안드로이드개발자과정
[12/02]iPhone 하이브리드 앱 개발 실무과정
[12/09][기업100%환급]Spring Framework,MyBatis,Hibernate실무프로젝트과정
[12/16][기업100%환급]PL/SQL,ORACLE HINT,TUNING
[12/23][기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
[01/06][기업100%환급]SQL기초에서 Schema Object까지
[평일야간]
[11/28]Spring3.X, MyBatis, Hibernate실무과정
[11/29]자바초보에서안드로이드까지
[12/02]JAVA&WEB프레임워자실무과정
[12/03]웹퍼블리싱 마스터
[12/03]iPhone하이브리드앱개발실무과정
[12/04]SQL초보에서실전전문가까지
[12/09]C#,ASP.NET마스터
[주말]
[11/30]SQL초보에서전문가까지
[11/30]C#,ASP.NET마스터
[12/07]Spring3.X,MyBatis,Hibernate실무과정
[12/14]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
[12/14]자바초보에서안드로이드까지
[12/14]웹퍼블리싱 마스터
댓글 없음:
댓글 쓰기