JAVA接口类型的方法

classZoo{privateclassTigerimplementsAnimal{publicvoideat(){System.out.println("tigere... 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();
}
展开
 我来答
每天学点Java
2014-01-06 · TA获得超过5938个赞
知道大有可为答主
回答量:3547
采纳率:0%
帮助的人:1342万
展开全部
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();
}
zhou2214
2014-01-06 · TA获得超过706个赞
知道小有建树答主
回答量:495
采纳率:0%
帮助的人:510万
展开全部

返回的不是Animal,其实是Animal的匿名子类,因为已经把Animal借口中的抽闲函数具体化了。

楼主可以查阅java创建匿名子类的相关资料。给你写个例子:

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();//正确
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淡淡点墨
推荐于2017-11-26 · TA获得超过120个赞
知道答主
回答量:54
采纳率:75%
帮助的人:35.3万
展开全部

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");
    }
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
boychn
2014-01-06 · 超过27用户采纳过TA的回答
知道答主
回答量:104
采纳率:0%
帮助的人:72.8万
展开全部
Animal getAnimal()//这里不明白,Animal不是接口么,怎么可以定义方法?
接口不能直接实例化,但是可以做方法的返回类型

return new Animal()//还有这里,接口不是不能实例化么??
{
。。。。}
这里相当于一个匿名内部类,为Animal的一个子类,所以可以实例化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式