4 回答

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
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() // 還有這里,接口不是不能實(shí)例化么?? 你說的沒有錯(cuò),確實(shí)不能實(shí)例化,但是這里是匿名類,效果相當(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)驗(yàn) 獲得超7個(gè)贊
返回的不是Animal,其實(shí)是Animal的匿名子類,因?yàn)橐呀?jīng)把Animal借口中的抽閑函數(shù)具體化了。
Interface A { void show(); } class Test { pubic static void main(String[] args) { Interface a= null ; //a=new Interface(); 這句是錯(cuò)誤的,接口不能實(shí)例化 a= new Interface(){ pulibc static void show() { System.out.println( "我其實(shí)是接口的實(shí)現(xiàn)子類,不是接口" ); } }; a.show(); //正確 } } |

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
Animal getAnimal(),接口可以作為返回類型,指定返回的類型必須是實(shí)現(xiàn)當(dāng)前接口的類.
new Animal(){
void eat() {
}
void sleep() {
}
}
這是一個(gè)匿名類,只是這個(gè)類沒有類名,但它實(shí)現(xiàn)了Animal接口,
如果換個(gè)寫法你可能就明白了:
... 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)驗(yàn) 獲得超4個(gè)贊
Animal getAnimal()//這里不明白,Animal不是接口么,怎么可以定義方法?
接口不能直接實(shí)例化,但是可以做方法的返回類型
return new Animal()//還有這里,接口不是不能實(shí)例化么??
{
。。。。}
這里相當(dāng)于一個(gè)匿名內(nèi)部類,為Animal的一個(gè)子類,所以可以實(shí)例化
添加回答
舉報(bào)