gpt4 book ai didi

java - 显式转换运算符和多态性

转载 作者:行者123 更新时间:2023-11-30 08:06:16 25 4
gpt4 key购买 nike

我有一个关于多态性和显式转换的小问题。这是问题所在:我有 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");
}
}

我的演示类是:

package x;

public class Demo
{
public static void main (String[] args)
{

Shape s1=new Circle2();
s1.draw();
((Shape)s1).draw();

}
}

这段代码的输出是:

draw Circle2
draw Circle2

我理解 s1.draw() 的多态行为调用 Circle2 上的 draw() 方法。最后一行让我感到困惑,当我像这样对 s1 进行显式转换时:((Shape)s1),这意味着表达式 ((Shape)s1) 是一个Shape 类型的引用是因为显式转换,对吗?如果是这样,为什么代码 ((Shape)s1).draw(); 调用 Circle2 中的 draw() 方法而不是 Shape 中的那个?

谢谢:)

最佳答案

转换 不会改变对象是什么,它只是改变编译器应该查看该对象的方式。

因此,即使您“认为”一个圆“只是一个形状”,它仍然是一个圆。

Circle1 调用 Shape 的唯一方法是从 within Circle1 中调用 Shape调用 super.draw()

关于java - 显式转换运算符和多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34500996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com