java 多个重写的方法,参数为空时会调用哪个?

2025-05-21 21:38:29
推荐回答(5个)
回答(1):

会调用String那个参数的函数

null 可以赋值给Object 和 String
但是编译器会预先赋值给子类 即String
如果你再加一个Integer为参数的函数
编译器就会报错 因为编译器不知道赋值给Integer 还是String好
null 是一个模棱两可的类型

关于重载函数 其实都是编译器的功能
编译器在编译期间会把命名重复 参数不同的函数 重新起名
所以在字节码中不存在重载函数

回答(2):

会调public static void fun(Object a)

回答(3):

很负责的告诉你,是
public static void fun(String a)

回答(4):

会调用fun(String a)
如果没有存在null的类型object才会被调用

回答(5):

如果做继承关系条线
Object ------A---------B(null)
A继承Object,B继承A,如果fun的参数为Object或其他类(非A非B),则调用参数Object那个fun
如果是A和A的子类但不是B的子类,就调用A的fun
如果是B和B的子类就调用参数为B的fun
null即使都能匹配,但按最小匹配原则
好比B的子类也是A的子类,但是实际肯定是调用B的fun
如果你是Object跟String 那null就该调用参数为String的fun了
如果你做两条线
Object ------A---------B(null)
------C---------D(null)
null可以被看做B的也可以被看做D的,这是编译器会报错的,null模棱两可