java - 方法重载和重载

原文 标签 java eclipse overriding overloading

我有下面列出的代码。为什么打印:“ V”-“ greet(Z)”-“ greet(Z)”?我会说“ V”-“ greet(V)”-“ greet(Z)”,但是似乎我在方法重载和重写方面缺少一些要点,有人可以向我解释一下和/或链接一些资源来掌握这一点吗? ?

class Z {

    public void me() {
        System.out.print(" Z");

    }

    public void greet(Z z) {
        System.out.print ("greet(Z)");
    }

}
class V extends Z {

    @Override
    public void me() {
        System.out.println("V");
    }

    public void greet(V v) {
        System.out.println("greet(V)");
    }
}
public  class Quiz{
    public  static void main(String[] args) {

        Z a = new V();
        V b = new V();
        a.me();
        System.out.print("-");
        a.greet(b);
        System.out.print("-");
        a.greet(a);
    }
}

最佳答案

public void greet(V v)public void greet(Z z)的重载版本:前者不会覆盖后者。

a.greet(b);


aZ类型的,只有一种方法可供选择:greet(Z z)

a.greet(a);


aZ类型的,仍然只有一种方法可供选择:greet(Z z)

b.greet(a);


bV类型,有两种方法可供选择。由于a的类型为Z,因此将选择最合适的greet(Z z)

b.greet(b);


bV类型,有两种方法可供选择。由于b的类型为V,因此将选择最合适的greet(V V)

关于java - 方法重载和重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56593160/

相关文章:

c - 尝试进入for循环时出现段错误(核心已转储)

java - 扩展ChannelHandlerAdapter,但不覆盖或实现ChannelHandlerAdapter中的方法

css - 更改 jQuery slider 的宽度和高度

c++ - 为什么我的C++版本说我在 “invalid character in path”中?

java - 错误:找不到与给定名称匹配的资源(在“主题”处,值为“@ style/Theme.Sherlock”)

java - 通过Java适用于所有平台的 native LAF

java - Grails StaleObjectStateException in lock() 方法

qt - 覆盖可检查的 QGroupBox 切换行为

java - Java中的2D arraylist和类继承

java - 如何在Java中正确使用参数,为什么它们有优势?