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 voidgreet(V v)public voidgreet(Z z) 的重载版本:前者不会覆盖后者。

a.greet(b);

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

a.greet(a);

a 的类型为 Z,仍然只有一种方法可供选择: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/

相关文章:

java - GAE 数据存储游标是否永久且持久?

java - 处理程序随机停止更新 setText

java - Eclipse 编辑器中当前选定代码的 AST?

java - 我是否需要再次实现父类的接口(interface)

delphi - 覆盖构造错误

java - 将 2d 游戏世界坐标转换为屏幕位置

java - 具有弱键和身份哈希的 ConcurrentHashMap?

android - Eclipse AndroidManifest.xml 格式

eclipse - JSF2 + CDI(焊接)bean + Eclipse Helios 的内容辅助

javascript - 使用 JS 覆盖 CSS 类