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(){};这什么意思```高手帮帮解释下!!!
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(){};这什么意思```高手帮帮解释下!!!
new E(){}这办法只适用于E这个抽象类中没有抽象方法。
new E(){}是用一个实现了E的匿名内部类来构造一个该匿名内部类的对象。因为 E没有抽象方法,所以那对儿大括号是空的。
就像new ActionListener(){
}一样,但是它必须实现actionPorfermat方法。
现在new E(){}的{}是空的,也就是说,E抽象类中没有抽象方法,正如楼上所说。
但是如果E中有抽象方法的话,你必须在{}中对抽象方法进行实现。
new E();当然会报错啦,你那个E是一个抽象类,抽象类不可以new的,即不能实例化得
懂了没,如果你把outPut方法改为抽象方法的话,即abstract void outPut() ; 那么匿名内部内里必须有outPut的实现类
然后呢E e = new E(){};
这里有多态,父类的引用指向子类的对象,前面就是引用,后面生成了子类对象,不过这个子没起名字的
new E();当然会报错啦,你那个E是一个抽象类,抽象类不可以new的,即不能实例化得
懂了没,如果你把outPut方法改为抽象方法的话,即abstract void outPut() ; 那么匿名内部内里必须有outPut的实现类
然后呢E e = new E(){};
这里有多态,父类的引用指向子类的对象,前面就是引用,后面生成了子类对象,不过这个子没起名字的
使用到了匿名类,定义了一个匿名类,并且继承于E,通过new实例化了这个匿名类的一对象,并作了一个隐式的上溯造型成为E,赋值给e
E e = new E();这样就报错,(E是抽象的,无法对其进行实例化)
直接实现化抽象E,肯定不对。new E(){};这什么意思```高手帮帮解释下!!!
定义了一个匿名类,并且继承于E,通过new实例化了这个匿名类的一对象
new E(){}其实是一个内部匿名类
相当于你在其它地方写了一个类继承E 实现其中所有抽象方法(这里的E没有抽象方法也就不需实现)
然后通过new关键字 创建该类实例 赋给抽象类对象e
只是简化了而已