2013년 11월 24일 일요일

[JAVA TIP]상위클래스생성자에서 하위클래스에 오버라이드된 메소드를 호출시!!

[JAVA TIP]상위클래스생성자에서 하위클래스에 오버라이드된 메소드를 호출시!!

생성자에서 오버라이드된 메소드를 호출
: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]웹퍼블리싱 마스터


댓글 없음:

댓글 쓰기