【发布时间】:2016-01-24 12:08:35
【问题描述】:
我有 2 个课程:Triangle 和 RightAngledTr。 RightAngledTr 继承自 Triangle。代码如下:
Triangle 类:
class Triangle {
public void draw() {
System.out.println(“Base::draw\n“);
}
public void computeCentroid(Triangle t) {
System.out.println Base::centroid\n“);
}
}
RightAngledTr 类:
class RightAngledTr extends Triangle {
public void draw() {
System.out.println(“RightAngle::draw\n“);
}
public void computeCentroid(RightAngled t) {
System.out.println(RtAngle::centroid\n“);
}
}
在我的驱动程序中,我有以下代码行:
Triangle tr= new RightAngledTr ();
RightAngledTr rtr= new RightAngledTr ();
tr.computeCentroid(rtr);
tr.draw();
rtr.computeCentroid(tr);
我预期的输出是:
Base::centroid
Base::draw
Base::centroid
但是,我得到的输出是:
Base::centroid
RightAngle::draw
Base::centroid
我的问题是,当tr.draw()调用RightAngleTr类'方法时,为什么tr.computeCentroid(rtr)调用Triangle类'方法?
这没有意义。 Liskov 替换原则似乎不适用。
【问题讨论】:
-
“重载方法使用早期绑定,而重载方法使用后期绑定”。见stackoverflow.com/questions/10915828/…
标签: java inheritance polymorphism overriding