此段代码来自于Java编程思想!下面有2种方法实现多重继承。我对下面的第2种方法(产生内部类)不理解,为什么“return new B(){};”就可以了。都不知道这个接口怎么被实现了,之前我只知道好像这是普通匿名类的写法。我很菜,望大虾详细解说!谢谢!interface A{}
interface B{}class X implements A,B{}  //状况1class Y implements A{    //状况2
B makeB(){
return new B(){};      //{} 造成 内部类  ;这个地方理解不了
}
}public class test
{ static void tackA(A a){}
static void tackB(B b){}

public static void main(String[] args)
{
X x=new X();
Y y=new Y();
tackA(x);
tackA(y);
tackB(x);
tackB(y.makeB());
}}

解决方案 »

  1.   


    interface A{}
    interface B{}class X implements A,B{}  //状况1class Y implements A{    //状况2
        B makeB(){
            return new B(){};      //{} 造成 内部类  ;这个地方理解不了
        }
    }public class test
    {    static void tackA(A a){}
        static void tackB(B b){}
        
        public static void main(String[] args)
        {
            X x=new X();
            Y y=new Y();
            tackA(x);//使用tackA(A a),X是A的实现,
            tackA(y);//使用tackA(A a),Y是A的实现,
            tackB(x);//使用tackB(B b),x是B的实现,
            tackB(y.makeB());//使用tackB(B,b),虽然Y没有实现B,但是其中makeB方法返回了B(new B())
        }}
      

  2.   

    监听器中很多这种用法,对new B(){}这种写法不是很理解。这里new的应该是接口B的实现吧,而不是接口B
      

  3.   

    2楼的大虾,你好,还想问下你"虽然Y没有实现B,但是其中makeB方法返回了B(new B())"这句话令我费解,B(new B()) 是什么东西啊我知道:new B();产生一个匿名类而return new B(){} 是什么意思啊,本来应该是重写B类里的方法吧糊涂了,期待更清楚的解答
      

  4.   

    B(new B()):他的意思是返回B,括号里面的是说明B是怎么来的 
    new B(){}:{}确实已重写了接口里的虚方法,只是你接口中没写方法而已,new的是B的实现类,而不是接口B我的理解。。
      

  5.   

    6楼的朋友,你好。“new的是B的实现类,而不是接口B”,这句话有点费解那你的意思是:B的实现类类名也和接口名一样都为B吗疑惑中……
      

  6.   


    我也正在看这本think in ,我的理解就是一个有返回类型的方法,而且返回的是个对象,并且这个对象里面可以写成员和方法。