This question already has answers here:
Using inherited overloaded methods
                                
                                    (11个答案)
                                
                        
                4年前关闭。
            
        

我正在运行的代码如下:

public class Triangle {
     public void draw() {
         System.out.println("Base::draw\n");
     }
     public void computeCentroid(Triangle t) {
         System.out.println("Base::centroid");
     }
}


class RightAngledTr extends Triangle {
    public void draw() {
       System.out.println("RightAngle::draw\n" );
    }
    public void computeCentroid(RightAngledTr t) {
       System.out.println("RtAngle::centroid");
    }
}


public static void main(String[] args) {
    Triangle tr= new RightAngledTr();
    RightAngledTr rtr= new RightAngledTr();
    tr.computeCentroid(tr);
    tr.draw();
    tr.computeCentroid(rtr);
}


这给出的输出如下:

Base::centroid
RightAngle::draw
Base::centroid


我不明白第三条输出线背后的原因。
我的疑问:
tr.computeCentroid(rtr)应该调用派生类RightAngledTr的方法(因为传递的参数是rtr)。因此打印:RtAngle :: centroid

请帮我在这里。提前致谢!

最佳答案

public void computeCentroid(RightAngledTr t)




public void computeCentroid(Triangle t)


具有不同的方法签名,因此这里根本没有覆盖。

关于java - 涉及继承的代码片段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33349884/

10-13 23:35