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 回答
呼如林
TA貢獻(xiàn)1798條經(jīng)驗 獲得超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()// 還有這里,接口不是不能實例化么?? 你說的沒有錯,確實不能實例化,但是這里是匿名類,效果相當(dāng)于代碼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();} |
元芳怎么了
TA貢獻(xiàn)1798條經(jīng)驗 獲得超7個贊
返回的不是Animal,其實是Animal的匿名子類,因為已經(jīng)把Animal借口中的抽閑函數(shù)具體化了。
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("我其實是接口的實現(xiàn)子類,不是接口"); } }; a.show();//正確 }} |
慕無忌1623718
TA貢獻(xiàn)1744條經(jīng)驗 獲得超4個贊
Animal getAnimal(),接口可以作為返回類型,指定返回的類型必須是實現(xiàn)當(dāng)前接口的類.
new Animal(){
void eat() {
}
void sleep() {
}
}
這是一個匿名類,只是這個類沒有類名,但它實現(xiàn)了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"); }} |
守著一只汪
TA貢獻(xiàn)1872條經(jīng)驗 獲得超4個贊
Animal getAnimal()//這里不明白,Animal不是接口么,怎么可以定義方法?
接口不能直接實例化,但是可以做方法的返回類型
return new Animal()//還有這里,接口不是不能實例化么??
{
。。。。}
這里相當(dāng)于一個匿名內(nèi)部類,為Animal的一個子類,所以可以實例化
添加回答
舉報
0/150
提交
取消
