gpt4 book ai didi

java - 方形和矩形继承

转载 作者:行者123 更新时间:2023-11-29 07:48:31 25 4
gpt4 key购买 nike

这是一个关于 Java 中具有两个类的基本继承的问题。

我们有两个类,第一个是Rectangle:

private double length;
private double width;

public Rectangle(double length, double width)
{
this.length = length;
this.width = width;
}

接下来我们有一个名为Square的扩展类,它扩展了Rectangle,所以通过super()我们知道它使用了构造函数Rectangle 类。

private double side;

public Square(double side)
{
super(side, side);
this.side = side;
}

public void print()
{
System.out.println("I am a square of side " + side);
}

这是我们的主要内容:

Square b = new Square(6.0);
Rectangle c = (Rectangle) b;
c.print();

我们创建一个 Square 类型的对象,它包含两个 side 变量 double 6.0

接下来,我们将 b 转换为 Rectangle c,这就是我的问题所在。

为什么c.print()会打印出I am a square of side 6.0

最佳答案

这假设 Rectangle 声明了一个 print() 方法。

这个 Action

Rectangle c = (Rectangle) b;

不对 b 引用的实例做任何事情。它只是将引用变量 b 扩展为其父类(super class)型 Rectangle

调用 print() 将具有多态行为,并且在运行时,将使用 Square 的实现,因为 c 引用了一个 Square 对象,已将 size 设置为 6

Square b = new Square(6.0);
...
private double side;

public Square(double side) {
super(side, side);
this.side = side;
}

请注意,这是自 all methods are virtual by default 以来 Java 中的预期行为.在 C++ 和 C# 等其他语言中,由于 Rectangle 中的 print 方法未声明为 virtual,因此您的转换会起作用。

更多信息:

关于java - 方形和矩形继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23353468/

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