我有一個多態性和顯式強制轉換的小問題。 這是問題所在: 我有3個公共課:顯式強制操作符和多態性
package x;
public class Shape
{
public void draw(){
System.out.println("draw a Shape");
}
}
package x;
public class Circle1 extends Shape
{
}
package x;
public class Circle2 extends Circle1
{
@Override
public void draw()
{
System.out.println("draw Circle2");
}
}
我的Demo類是:
package x;
public class Demo
{
public static void main (String[] args)
{
Shape s1=new Circle2();
s1.draw();
((Shape)s1).draw();
}
}
這段代碼的輸出是:
平局CIRCLE2
繪製Circle2
我瞭解s1.draw()
的多態行爲,它調用Circle2
上的draw()
方法。 最後一行讓我感到困惑,當我在s1上進行顯式強制轉換時,如下所示:((Shape)s1)
,這表示((Shape)s1)
是表達式類型的引用,因爲顯式強制轉換,對吧? 如果是這樣,那麼爲什麼然後代碼((Shape)s1).draw();
調用Circle2
中的draw()
方法,而不是Shape中的方法?
謝謝:)
's1'已經有'形狀'類型...所以演員陣容沒有任何意義 –