解决方案 »

  1.   

    不能  接口不能直接new  
      

  2.   


    这个。代码是对的 。在thinking in java中看到的。嘿嘿。
      

  3.   

    必须是接口的实现,你new的是实现,你最好还是理解一下多态把
      

  4.   

    Vampire vlad = new VeryBadVampire();这个并不是创建接口对象,而是创建子类对象(接口是不能创建对象的),然后赋给父类引用。
    当调用viad(接口)中定义的方法时,jvm会调用具体对象(子类)的方法。这就是java的多态。Vampire vlad = new VeryBadVampire();
            u(vlad);
            v(vlad);
            w(vlad);
    这个u,v,w三个方法参数声明为Vampire(接口),这个就是我们常说的面相接口编程。这样做的好处是,可以根据不同的业务,创建不同的接口(Vampire)实现类,而u,v,w这三个方法中的代码则不需要改变。这样就可以在改动很少的情况下扩展业务。
      

  5.   

    通俗易懂地讲,你就记住,接口不可以直接用于new的对象。但是可以作为参数类型以及类类型出现,new 后边跟着的必须是非接口类,但是new 出来的对象实例可以用接口类类型来接受,同样一个方法的参数类型也可以用接口类型,跟这个道理一样,只是使用接口类型,而不是用接口类去实例化对象,接口类型声明变量,接受的是其实现类new出来的对象,这也是java 实现多态的必要条件:用接口类型或基类类型去声明变量,来接收实现类或子类的对象,当变量调用成员方法时,调用的是其实现类或子类的方法。
      

  6.   

     new VerBadVampire是创建一个实现了Vampire接口的类,因此实际上是new了一个类,这是可以的。
      

  7.   

    1、首先只有实际的类才能new,而interface和abstract class都不可以new
    2、接口或基类的引用变量可以指向实现类或子类的对象,这是java实现多态性的前提。
    什么是多态?也就是用接口或基类声明的引用变量来指向实现类或子类的对象,从而调用该接口的方法时表现的是子类对象的方法。这样就可以达到接口重用的目的。