abstract class E{
void outPut(){
System.out.println ("E");
}
}
public class Test8{
public static void main (String[] args) {
E e = new E(){};
e.outPut();
    }
}
E e = new E(){};这是什么意思?
E e = new E();这样就报错,(E是抽象的,无法对其进行实例化)
new E(){};这什么意思```高手帮帮解释下!!!

解决方案 »

  1.   

    你那个抽象类没有抽象方法,所以{},就可以。也就是一个匿名实现类。因为没有需要实现的抽象方法,搞一个空实现就好了。传说中的java编程思想应该说明过这个问题吧。lz可以去看看。如果是有抽象方法的抽象类,这个地方就可以写抽象方法的实现。总之,没有记错的话,那个东西叫做抽象类的匿名实现类。
      

  2.   

    哈哈!
    new E(){}这办法只适用于E这个抽象类中没有抽象方法。
    new E(){}是用一个实现了E的匿名内部类来构造一个该匿名内部类的对象。因为 E没有抽象方法,所以那对儿大括号是空的。
      

  3.   

    new E(){}这不并不是来实例化一个类的对象,而是实现抽象类。
    就像new ActionListener(){
    }一样,但是它必须实现actionPorfermat方法。
    现在new E(){}的{}是空的,也就是说,E抽象类中没有抽象方法,正如楼上所说。
    但是如果E中有抽象方法的话,你必须在{}中对抽象方法进行实现。
      

  4.   

    new E() {}匿名内部类,是从抽象类哪里继承而来,相当于E的子类,因为该类没有名字,所以叫匿名内部类,这种类一般只使用一次。
    new E();当然会报错啦,你那个E是一个抽象类,抽象类不可以new的,即不能实例化得
    懂了没,如果你把outPut方法改为抽象方法的话,即abstract void outPut() ; 那么匿名内部内里必须有outPut的实现类
    然后呢E e = new E(){};
    这里有多态,父类的引用指向子类的对象,前面就是引用,后面生成了子类对象,不过这个子没起名字的
      

  5.   

    new E() {}匿名内部类,是从抽象类哪里继承而来,相当于E的子类,因为该类没有名字,所以叫匿名内部类,这种类一般只使用一次。
    new E();当然会报错啦,你那个E是一个抽象类,抽象类不可以new的,即不能实例化得
    懂了没,如果你把outPut方法改为抽象方法的话,即abstract void outPut() ; 那么匿名内部内里必须有outPut的实现类
    然后呢E e = new E(){};
    这里有多态,父类的引用指向子类的对象,前面就是引用,后面生成了子类对象,不过这个子没起名字的
      

  6.   

    E e = new E(){};
    使用到了匿名类,定义了一个匿名类,并且继承于E,通过new实例化了这个匿名类的一对象,并作了一个隐式的上溯造型成为E,赋值给e
    E e = new E();这样就报错,(E是抽象的,无法对其进行实例化)
    直接实现化抽象E,肯定不对。new E(){};这什么意思```高手帮帮解释下!!!
    定义了一个匿名类,并且继承于E,通过new实例化了这个匿名类的一对象
      

  7.   

    抽象类/接口 中没有构造方法 所以不能通过new调用构造方法实例化 必须由子类实例化
    new E(){}其实是一个内部匿名类
    相当于你在其它地方写了一个类继承E 实现其中所有抽象方法(这里的E没有抽象方法也就不需实现)
    然后通过new关键字 创建该类实例 赋给抽象类对象e
    只是简化了而已