2017-12-05 1 views
1

캐스팅 워드 "(SuperClass)"를 사용하는 주 방법은 무엇입니까? 개체 유형이 변경됩니까?캐스팅과 그 결과 [Java]

class SuperClass{ 
    public void method(){ 
    System.out.print("SuperClass"); 
    } 
} 

class Sub extends SuperClass{ 
    public void method(){ 
    System.out.print("SubClass"); 
    } 
} 

public class SubSub extends Sub{ 
    public static void main(String args[]){ 
    ((SuperClass)new SubSub()).method(); 
    } 
    public void method(){ 
    System.out.print("SubsubClass"); 
    } 
} 
+0

"표시된 객체 ('new SubSub()')를이 표현식에 대해 표시된 유형 ('SuperClass')의 인스턴스로 간주합니다. 이 경우 프로그램의 결과에는 아무런 영향을주지 않습니다. – khelwood

+0

귀하의 질문에 대한 종합적인 답변은 이미 있습니다 (https://stackoverflow.com/questions/5289393/casting-variables-in-java). – avix

답변

3

캐스팅은 개체 유형을 변경하지 않습니다. 컴파일러에게 객체를 다른 방식으로 처리하도록 알려줍니다. 즉, 객체 참조를 변경합니다.

개체 참조가 SuperClass인데도 개체는 여전히 SubSub 클래스의 개체이므로 SubSub 클래스의 method()가 호출됩니다. 이것은 런타임 다형성이라고도합니다. 즉, 부모 클래스의 참조를 사용하여 해당 자식 클래스의 객체를 가리 킵니다.

관련 문제