此段代码来自于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());
}}
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());
}}
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())
}}
new B(){}:{}确实已重写了接口里的虚方法,只是你接口中没写方法而已,new的是B的实现类,而不是接口B我的理解。。
我也正在看这本think in ,我的理解就是一个有返回类型的方法,而且返回的是个对象,并且这个对象里面可以写成员和方法。