java中多态性的小误解

java中多态性的小误解,java,polymorphism,Java,Polymorphism,你好,我有一个多态性问题 总的来说,我想我已经理解了它的含义。 我在下面添加了一个MWE 我希望我在控制台上使用String获得两次文本。事实上,两篇文章我都收到过一次。为什么? 原因是我想要创建一个类似访问者模式的模式,并且我想要避免if(…instanceof…的链。因此,我认为我为每种类型实现了一个重载的方法(这里是String和Object) 现在的问题是如何让java选择正确的方法 PS:我遇到这个问题的原因是我必须将基本类型“装箱”到类中以供将来使用。因此,我必须测试整数,布尔值。。

你好,我有一个多态性问题

总的来说,我想我已经理解了它的含义。 我在下面添加了一个MWE

我希望我在控制台上使用String获得两次文本
。事实上,两篇文章我都收到过一次。为什么?

原因是我想要创建一个类似访问者模式的模式,并且我想要避免
if(…instanceof…
的链。因此,我认为我为每种类型实现了一个重载的方法(这里是
String
Object

现在的问题是如何让java选择正确的方法

PS:我遇到这个问题的原因是我必须将基本类型“装箱”到类中以供将来使用。因此,我必须测试
整数
布尔值
。。。这也是我不能简单地扩展类并使用公共方法的原因

public class TestOverload
{
    public static void main(String[] args)
    {
        String s = "abc";
        Object o = s;

        TestOverload test = new TestOverload();
        test.doSomething(s);
        test.doSomething(o);
    }

    public void doSomething(Object o)
    {
        System.out.println("Using Object");
    }

    public void doSomething(String s)
    {
        System.out.println("Using String");
    }
}

在java虚拟机中,方法由其名称、参数类型和返回类型确定。这就是为什么具有相同名称的两个或多个方法可以共存的原因,因为它们的“全名”是不同的。 Java编译器选择最合适的方法进行调用,这样就可以实现所需的最小参数类型转换(并忽略返回类型)。因此,对于第一种情况,它选择
doSomething(字符串s)
,对于第二种情况,它选择
doSomething(对象o)
。在运行时,会调用在编译时选择的方法,因此对象o的实际类型并不重要


如果将简单类型分为整型和布尔型,则除了
instanceof
之外,没有其他方法可以确定实际类型。将装箱考虑到自己可以扩展的类型。

java使用方法参数的迟/静态绑定(可能问题是有用的)。我想恐怕您必须链接
instanceof
来选择合适的方法。