gpt4 book ai didi

java - Java中的继承和多态

转载 作者:搜寻专家 更新时间:2023-11-01 02:23:13 24 4
gpt4 key购买 nike

我有 2 个类:TriangleRightAngledTrRightAngledTr 继承自 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.computeCentroid(rtr) 调用 Triangle 类的方法,而 tr.draw() 调用RightAngleTr 类的方法?

没有意义。 Liskov 替换原则似乎不适用。

最佳答案

computeCentroid() 方法的签名不同。因此,您不是压倒一切,而是重载。

关于java - Java中的继承和多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33328021/

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