package test;abstract class Base {
public Base(int i){
System.out.println("base construction, i="+i);
}
public  abstract  void f();
}
public class AnonymousConstruction{
public static Base getBase(int i){
System.out.print("anonymouys class");//抽象类不是不能被实例化的吗?为什么能这么实例化?
return new Base(i){
@Override
public void f() {

}

};
}

public static void main(String [] args){
Base base = getBase(47);
base.f();
}
}

解决方案 »

  1.   


    new Base(i){
    @Override
    public void f() {}};这段代码是一个匿名类。它类似一个实现了 Base 这个抽象类的一个“具体”类
      

  2.   

    +1,跟Runnable一样
    Runnable run = new Runnable() {
      @override
      public void run() {};别说没接触过线程啊~
      

  3.   

    匿名类 extends了Base这个抽象类
      

  4.   


    new Base(i){
    @Override
    public void f() {}};这里新建了一个类,并返回它的对象。Override不是提示了是重写吗
      

  5.   

    当然可以啊!
    package test;abstract class Base {
    public Base(int i){
    System.out.println("base construction, i="+i);
    }
    public abstract void f();

    public class AnonymousConstruction{
    public static Base getBase(int i){
    System.out.print("anonymouys class");//抽象类不是不能被实例化的吗?为什么能这么实例化?
    return new Base(i){
    @Override
    public void f() {}};
    }public static void main(String [] args){
    Base base = getBase(47);
    base.f();
    }
    }
    上述代码中,
    return new Base(i){
    @Override
    public void f() {}};就提供了抽象类Base的public  void f()的实现!
    这就提供了Base抽象的一个实例!
      

  6.   

    确实,抽象类是不能被实例化的,不过通过return..是可以的