日期:2014-05-20  浏览次数:20704 次

内部类实现接口疑问!帮忙分析一小段代码
此段代码来自于Java编程思想!

下面有2种方法实现多重继承。

我对下面的第2种方法(产生内部类)不理解,为什么“return new B(){};”就可以了。

都不知道这个接口怎么被实现了,之前我只知道好像这是普通匿名类的写法。

我很菜,望大虾详细解说!谢谢!

Java code
interface A{}
interface B{}

class X implements A,B{}  //状况1

class 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());
    }

}


------解决方案--------------------

------解决方案--------------------
Java code

interface A{}
interface B{}

class X implements A,B{}  //状况1

class 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楼的大虾,你好,还想问下你

"虽然Y没有实现B,但是其中makeB方法返回了B(new B())"

这句话令我费解,B(new B()) 是什么东西啊

我知道:

new B();产生一个匿名类

而return new B(){} 是什么意思啊,本来应该是重写B类里的方法吧

糊涂了,期待更清楚的解答

------解决方案--------------------

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