[英]Java casting and polymorphism
public class A {
public void x()
{
System.out.println("A");
}
}
public class B extends A {
public void x()
{
System.out.println("B");
}
}
B b = new B();
A a = (A) b;
a.x();
此代碼顯示“ B”。 你能告訴我為什么嗎? 我認為它將打印“ A”。
B b
是對您創建的新對象的引用 new B()
當您將引用從B
轉換為A
,該對象將保持不變並保持不變,並且當您調用覆蓋的方法x()
時,它的作用完全相同。
只需在代碼中添加這一行並檢查: System.out.println(a.getClass());
。 打印class B
。
B b = new B();
A a = (A) b;
a.x();
System.out.println(a.getClass()); // prints Class B
因此,基本上,即使將b強制轉換為(A),被調用的方法也將是B
那是多態性 。 查看對象 ,前提是參考文件符合合同規定。
那是因為 :
這將創建一個新的B類對象,對象引用為b
B b = new B();
在這種情況下, a
是Class A
的對象引用,並且您正在使用a=b
,這意味着a
將引用b
所引用的同一對象(即Class B
的對象),因此這就是為什么要使用a Class B
和印刷品B
A a = (A) b;
a.x();
在投射對象時,我們具有以下可能性。1.parent = child 2.child =(child)Parent
public class C {
public static void main(String[] args) {
B b = new B(); // b is child
TestPoly t= new TestPoly(); // t is parent
t=(TestPoly)b;//parent=(parent)child i.e parent=child
t.x(); // return B
b=(B)t; //child=(child)parent i.e b=t
b.x(); // return B (because your calling child.x())
B b1 = new B();//child
TestPoly a = (TestPoly) b1;//p=(p)c; ie= p=child
a.x(); //return B
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.