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();
}
}
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();
}
}
new Base(i){
@Override
public void f() {}};这段代码是一个匿名类。它类似一个实现了 Base 这个抽象类的一个“具体”类
Runnable run = new Runnable() {
@override
public void run() {};别说没接触过线程啊~
new Base(i){
@Override
public void f() {}};这里新建了一个类,并返回它的对象。Override不是提示了是重写吗
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抽象的一个实例!