JAVA

overriding 실습 (ex:할아버지/아버지/아들)

Tiwaz 2009. 11. 21. 13:44
-------------------------------------------------
//Grandfather.java

class Grandfather {
    String name = "할아버지";
}

--------------------------------------------------
//Father.java

class Father extends Grandfather {

    String name = "아버지";

}//class

-----------------------------------------------------
//Son.java

class Son extends Father {
    String name = "아들";
} //class

------------------------------------------------------
//TypeCastingTest.java

class TypeCastingTest {
    public static void main(String[] args) {
       
        Son s1 = new Son();  // ok
        Father f1 = new Father(); // ok
        Grandfather g1 = new Grandfather(); // ok

        System.out.println(s1.name); //아들
        System.out.println(f1.name); //아버지
        System.out.println(g1.name); //할아버지

        //상위형변환(upcasting)
        Father f2 = new Son(); //ok
        Grandfather g2 = new Son(); //ok

        Grandfather g3 = new Father(); //ok

        System.out.println(f2.name); //아버지
        System.out.println(g2.name); //할아버지
        System.out.println(g3.name); //할아버지

       
        //하위형변환(downcasting)
        //Son s2 = new Father(); // x
        //Exception in thread "main" java.lang.ClassCastException: Father cannot be cast to Son
        //at TypeCastingTest.main(TypeCastingTest.java:28)

        //Son s2 = (Son)new Father(); //명시적 타입 변환
        //Father f3 = (Father)new Grandfather();

        // heap / GF /  F / S / 메모리 참조 범위가 하위 타입이 넓다.
        // 하->상  형변환 한것만.
        //System.out.println(s2.name);
        //System.out.println(f3.name);

   
        //하위 형변환
        //하위타입 객체참조변수에 상위타입 객체 참조값을 저장할때는
        //명시적으로 형변환을 해야한다.
        //단, 한번은 하위타입에서 상위타입으로 형변환되었던 것만
        //하위형변환 가능하다.
        Son s5 = new Son();
        Father f5 = s5;
        Son s6 = (Son)f5;
       
        System.out.println(s5.name);
        System.out.println(f5.name);

    }//main
}//class