下面的内容不明白,Animal不是接口吗,为什么可以定义方法?

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();
}

UYOU
浏览 205回答 4
4回答

呼如林

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();}

元芳怎么了

返回的不是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();//正确    }}

慕无忌1623718

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");    }}

守着一只汪

Animal getAnimal()//这里不明白,Animal不是接口么,怎么可以定义方法?接口不能直接实例化,但是可以做方法的返回类型return new Animal()//还有这里,接口不是不能实例化么??{。。。。}这里相当于一个匿名内部类,为Animal的一个子类,所以可以实例化
打开App,查看更多内容
随时随地看视频慕课网APP