class Zoo
{
Animal getAnimal() //Animal是一个接口类型
{
return new Animal();
}
}
class Test
{
public static void main(String[] args)
{
Zoo z=new Zoo();
Animal an=z.getAnimal();//Animal是接口,那这句话是不是就不是实例化了呢?
}
}
这里面的getAnimal是非静态的方法,为什么可以在static main中初试化一个接口呢。

解决方案 »

  1.   

    接口怎么能实例化,Animal an=z.getAnimal();此处只是接口的一个连接而已
      

  2.   

    如果Animal是一个接口类型
    class Zoo
    {
    Animal getAnimal() //Animal是一个接口类型
    {
    return new Animal(); //-----------此语句可以通过?接口不可以
    }
      

  3.   

    return new Animal(){ };建议楼主好好看看基础的东西
      

  4.   

    应该是returun zoo
    这段代码是摘出来的,我改的有点仓促
    主要的问题是:在静态的main函数中使用了非静态的方法
    想问问怎么回事
    谢谢楼上几位
    真是高手!
      

  5.   

    Animal an=z.getAnimal();//Animal是接口,那这句话是不是就不是实例化了呢?
    是用接口接受具体的实例,这个相当于
    Person p = new Person("亚当","男");这里面的getAnimal是非静态的方法,为什么可以在static main中初试化一个接口呢。
    -------
    class A{
       public void fun(){}
       public static void main(String args[]){
         fun();//这个才是在静态方法中调用非静态方法,你这个是一个具体的实例调用自己本身的方法
       }
    }
      

  6.   

    貌似方法中间没有非静态的调用吧,Animal an=z.getAnimal();//Animal是接口,那这句话是不是就不是实例化了呢?最普通的类似与工厂方式获取实例的方法吧,何故不是实例化呢,只是new的方式被隐藏与方法之后而已吧
      

  7.   

    从代码来看
    Animal 不可能是接口  
    return new Animal(); --如果是接口,这句就会报错Animal an=z.getAnimal(); 中getAnimal()确实是非静态方法,
    但是他是被类Zoo初始化的对象z调用的,完全不会有问题