java 内部类求解
谁能给我解释一下下面这个程序中红色部分内容,抽象类不是不能被实例化吗?是否会与匿名类有关呢?谢谢各位啦。abstract class Base {
public Base(int i) {
System.out.print("Base constructor, i = " + i);
}
public abstract void f();
}
public class AnonymousConstructor {
public static Base getBase(int i) {
return new Base(i) {
{ System.out.print("Inside instance initializer"); }
public void f() {
System.out.print("In anonymous f()");
}
};
}
public static void main(String[] args) {
Base base = getBase(47);
base.f();
}
}
output:
Base constructor, i = 47Inside instance initializerIn anonymous f()
----------------解决方案--------------------------------------------------------
没有人知道吗
----------------解决方案--------------------------------------------------------
里面的那个内部类重写了抽象类的抽象方法public abstract void f();
,所以他不是抽象类了啊、、、、必然可以实例化了、、、、
----------------解决方案--------------------------------------------------------
Base base ;
这样只是定义了一个用于存放Base类型引用的变量,
而并没有进行实例化
----------------解决方案--------------------------------------------------------
getBasse() 是本类AnonymousConstructor 的一个方法。
abstract class Base {//抽象类
public Base(int i) {//抽象类的构造
System.out.println("Base constructor, i = " + i);
}
public abstract void f();//抽象方法
}
public class AnonymousConstructor {//测试类
public static Base getBase(int i) {//它是AnonymousConstructor 的一个方法,就你问的问题。
return new Base(i) {//匿名内部类,就是实例化Base
//(匿名内部类可以直接将一个接口或抽象类实例化)
{//非静态语句块,在new的时执行
System.out.println("Inside instance initializer");
}
public void f() {//重写抽象类Base的抽象方法。实现类必须重写父类中抽象方法。
System.out.println("In anonymous f()");
}
};//至此匿名内部类实例化完成。并返回。
}
public static void main(String[] args) {{//它是AnonymousConstructor 的mian方法,main中只能调静态方法
Base base = getBase(47);\\在这就是在调
base.f();
}
}//测试类完
----------------解决方案--------------------------------------------------------