匿名内部类方法重载时,为什么在“基类”中没有重载的情况下调用会报错,而当基类同样重载时调用不报错?

匿名内部类方法重载时,为什么在“基类”中没有重载的情况下调用会报错,而当基类同样重载时调用不报错?

问题描述:


class A
{
    void A_f()
    {

    }
    void A_f(int i)
    {

    }
}
class B
{
    A B_reciveA()
    {
        return new A()
        {
          void A_f()
          {
              System.out.println("A_f()");
          }
          void A_f(int i)
          {
              System.out.printf("A_f(%d)",i);
          }
          void A_f(String s)
          {
              System.out.println(s);
          }

        };
    }
}
public class inner
{
    public static void main(String [] args)
    {

        B b = new B();
        A a = b.B_reciveA();
        a.A_f();
        a.A_f(12);
        //a.A_f("哇哈哈");
    }
}

img

img
A_f(String s)方法是运行时检查的吗?

return new A()的时候已经在对A进行实例化了,B_reciveA()这个函数中对A进行了实例化,这个函数的返回值是A,相当于下面的这种写法

 A test()
    {
        A a = new A()
        {
            void A_f()
            {
                System.out.println("A_f()");
            }
            void A_f(int i)
            {
                System.out.printf("A_f(%d)",i);
            }
        };
        return  a;
    }

重载是在定义类的时候写的