【发布时间】:2014-06-14 17:31:35
【问题描述】:
这是一个关于 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?
【问题讨论】:
-
你希望它打印什么?
-
那甚至不会编译
-
如果你的所有类成员都是
private,那么使用继承有什么意义? -
@cagirici 不确定现在是否是在 OPs 学习阶段学习良好实践和设计模式的合适时机——因为他现在才理解该语言(甚至可能是一般的 OOP)。
-
对于读者(包括试图回答这个问题的人):假设
print是Rectangle类中声明的非虚拟方法,那么这段代码的行为就像@987654341中定义的那样@ 班级。virtual允许多态,在 Java 中所有方法默认都是虚拟的。
标签: java inheritance