2017-12-05 7 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()が呼び出されます。これは実行時多型とも呼ばれます。つまり、親クラスの参照を使用して、その子クラスのオブジェクトをポイントします。

関連する問題