我最近遇到了以下场景:
我有一个超类 A 和一个从中派生的 B 类。一个函数,比如 oracle,返回任一类型的对象。我想根据类型做不同的事情,但我不能为 A 和 B 引入新的成员函数。
一种解决方案是根据 getClass().getName() 进行分支。但是,我想知道多态性是否可以使用重载实现相同的行为:
public class Main
{
static class A{}
static class B extends A{}
public static void foo(A a) { System.out.println("A"); };
public static void foo(B b) { System.out.println("B"); };
static A oracle()
{
return (Math.random() > 0.5) ? new A() : new B();
}
public static void main(String[] args)
{
A x = oracle();
foo(x);
}
}
这总是输出“A”,我怀疑这是由于用于解决函数调用的早期绑定。有人可以承认这一点吗?