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

方法重写传递null对象[重复]

东郭勇
2023-03-14

我无法理解为什么这个程序打印字符串

class AA {

    void m1(Object o) {
        System.out.println("Object ");
    }

    void m1(String o) {
        System.out.println("String ");
    }
}

public class StringOrObject {

    public static void main(String[] args) {
        AA a = new AA();
        a.m1(null);
    }
}

请帮助我了解如何打印Sting而不是Object

共有2个答案

孙翰墨
2023-03-14

这将尝试进行最具体的调用。子类对象获取首选项,在这种情况下是String。

程彭祖
2023-03-14

戴夫·牛顿的评论是正确的。对该方法的调用转到最具体的可能实现。另一个例子是:

class Foo {}
class Bar extends Foo {}
class Biz extends Bar {}


public class Main {

    private static void meth(Foo f) {
        System.out.println("Foo");
    }

    private static void meth(Bar b) {
        System.out.println("Bar");
    }

    private static void meth(Biz b) {
        System.out.println("Biz");
    }


    public static void main(String[] args) {
        meth(null); // Biz will be printed
    }
}
 类似资料:
  • 我有以下代码: 我知道对于1和3,它打印“2”,因为调用了最特定的参数类型。但无法理解为什么2打印“2”。

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

  • 在以下程序中: 输出为“str”,有人能解释一下为什么要打印str吗?我无法理解这一点。

  • 为什么上面的代码有编译错误“java:default method equals in interface Table重写java.lang.Object的一个成员”?难道我们不能使用接口默认方法重写hashCode和equals方法吗?假设我在同一个接口中有方法来确定实现这个接口的对象的相等性?

  • 本文向大家介绍浅谈重写window对象的方法,包括了浅谈重写window对象的方法的使用技巧和注意事项,需要的朋友参考一下 重写window对象的方法不是一件新奇的事,比如我们可能需要改变默认alert的行为,如何安全的重写呢?      小菜看到某知名IT网站是这样的写法:      或者      实际上,这种写法有些欠妥。这相当于在window对象上添加了一个alert属性,它的优先级比系统

  • 我在Angular2中有一个组件托管用户表(userTableComponnent)和另一个userDetails组件。单击用户表中的行后,我想路由到用户详细信息。一种实现是仅传递 userId,因此在 userDetails 中,我使用另一个 http get 获取用户的详细信息。但是,这是多余的,因为我在userTableComponent中获取了所有用户信息。因此,我真正需要的是将 User