当前位置: 首页 > 知识库问答 >
问题:

方法重载和null关键字[重复]

穆鸿波
2023-03-14

如果有人能在下面解释一下,那就太好了。为什么在下面的示例中调用了打印(字符串s)方法,而未调用打印(对象o)。

package com.example;

public class DemoTest {

    public void print(Object o){
        System.out.println("Object");
    }
    public void print(String s){
        System.out.println("String");
    }
    public static void main(String[] args) {
        DemoTest dt = new DemoTest();
        dt.print(null);

    }
}

共有1个答案

终翔
2023-03-14

摘自方法重载中奇怪的Java null行为

这是因为字符串类从Object扩展而来,因此对Object更为具体。因此,编译器决定调用该方法。请记住,编译器总是选择最具体的方法来调用

 类似资料:
  • 我在一个类中重载了以下2个方法: 当我调用方法testMethod时,它会打印“String”。 当我再添加一个重载方法时: 它抛给我编译器错误:是矛盾的。 当我用null调用方法时,所有这些都会发生 我的问题是: 为什么它打印字符串而不是对象? 为什么添加第三种方法会出现编译错误?

  • 可能重复:NULL参数的方法重载 以下代码编译并运行良好。 在此代码中,要调用的方法是接受字符串类型参数的方法 医生说。 如果多个成员方法既可访问又适用于方法调用,则需要选择一个来为运行时方法调度提供描述符。Java编程语言使用选择最具体方法的规则。 但我不明白,当代码中接受原语int参数的方法之一被修改为接受包装器类型Integer的参数时,例如, 发出编译时错误。 对temp的引用不明确,me

  • 我一直在尝试练习一些java MCQ,但没能得到这一个,谁能解释一下输出是怎样的- 而不是

  • 我尝试了以下代码,但不理解输出: 输出:字符串 为什么? 感谢您的关注!

  • 问题内容: 在下面的代码中,输出为 串 如果我使用类型为参数的方法删除该方法,则输出为 目的 我知道当参数类型不完全匹配时方法的重载行为如何,但是我不明白如何将 null 视为和/或参数。 这有什么解释? 问题答案: 根据Java规范 15.12.2.5节,它始终使用最特定的方法。 简介相当具体: 如果多个成员方法既可访问又可应用于方法调用,则必须选择一个成员方法来为运行时方法分派提供描述符。Ja

  • 问题内容: 让我们看一下这个简单的Java代码: 我试图找出三个eat()方法的哪个版本。现在,当我键入 输出是“一般动物食用”,这是完全可以理解的。 当我键入以下内容时,会发生相同的事情: 输出是“吃干草的马”,这完全是合乎逻辑的。 这就是让我感到困惑的地方。当我键入: 我得到: 我希望编译器从Animal类引用而不是Horse对象引用中调用eat()方法。 所以我的问题是,当我有一个引用对象类