class Zoo{private class Tiger implements Animal{public void eat(){System.out.println("tiger eat");}public void sleep(){System.out.println("tiger sleep");}}Animal getAnimal()//这里不明白,Animal不是接口么,怎么可以定义方法?{return new Animal()//还有这里,接口不是不能实例化么??{public void eat(){System.out.println("animal eat");}public void sleep(){System.out.println("animal sleep");}};}}class Test{public static void main(String[] args){Zoo z=new Zoo();Animal an=z.getAnimal();an.eat();an.sleep();}}interface Animal{void eat();void sleep();}
4 回答
![?](http://img1.sycdn.imooc.com/533e4c3300019caf02000200-100-100.jpg)
呼如林
TA贡献1798条经验 获得超3个赞
package baidu; class Zoo { private class Tiger implements Animal { public void eat() { System.out.println( "tiger eat" ); } public void sleep() { System.out.println( "tiger sleep" ); } } Animal getAnimal() // 这里不明白,Animal不是接口么,怎么可以定义方法? { return new Animal() // 还有这里,接口不是不能实例化么?? 你说的没有错,确实不能实例化,但是这里是匿名类,效果相当于代码2 { public void eat() { System.out.println( "animal eat" ); } public void sleep() { System.out.println( "animal sleep" ); } }; } //代码2 Animal getAnimal2(){ class AnimalTest implements Animal{ @Override public void eat() { // TODO Auto-generated method stub } @Override public void sleep() { // TODO Auto-generated method stub } } return new AnimalTest(); } } class Test { public static void main(String[] args) { Zoo z = new Zoo(); Animal an = z.getAnimal(); an.eat(); an.sleep(); } } interface Animal { void eat(); void sleep(); } |
![?](http://img1.sycdn.imooc.com/5458471300017f3702200220-100-100.jpg)
元芳怎么了
TA贡献1798条经验 获得超7个赞
返回的不是Animal,其实是Animal的匿名子类,因为已经把Animal借口中的抽闲函数具体化了。
Interface A { void show(); } class Test { pubic static void main(String[] args) { Interface a= null ; //a=new Interface(); 这句是错误的,接口不能实例化 a= new Interface(){ pulibc static void show() { System.out.println( "我其实是接口的实现子类,不是接口" ); } }; a.show(); //正确 } } |
![?](http://img1.sycdn.imooc.com/5458620000018a2602200220-100-100.jpg)
慕无忌1623718
TA贡献1744条经验 获得超4个赞
Animal getAnimal(),接口可以作为返回类型,指定返回的类型必须是实现当前接口的类.
new Animal(){
void eat() {
}
void sleep() {
}
}
这是一个匿名类,只是这个类没有类名,但它实现了Animal接口,
如果换个写法你可能就明白了:
... Animal getAnimal() { return new A(); } ... class A implements Animal { public void eat(){ System.out.println( "animal eat" ); } public void sleep(){ System.out.println( "animal sleep" ); } } |
![?](http://img1.sycdn.imooc.com/54586653000151cd02200220-100-100.jpg)
守着一只汪
TA贡献1872条经验 获得超3个赞
Animal getAnimal()//这里不明白,Animal不是接口么,怎么可以定义方法?
接口不能直接实例化,但是可以做方法的返回类型
return new Animal()//还有这里,接口不是不能实例化么??
{
。。。。}
这里相当于一个匿名内部类,为Animal的一个子类,所以可以实例化
添加回答
举报
0/150
提交
取消