这个问题本身很奇怪,所以我查了百度,当然结果是能还是不能就要看自己的理解了,匿名内部类因为是匿名的,当然不能像平常的构造函数那样定义构造方法,于是有些聪明的程序员就将构造代码块当成是构造函数那样用,因为它无非也是对对象的初始化过程吗,这样想的话
new Runnable(){
private int i;
{ i=100; }
}
就实现了和构造函数类似的效果了。
那么如何实现构造方法的重载呢?构造代码块只有一份啊?
我这么写 new Runnable(flag){
init(){}
init(String name){}
{
swich(flag){
case 1: init();break;
case 1: init(name);break;
}
}
}
这个flag通过父类传进来,当然像我这么写Runnable肯定不行,那样我要去Runnable里面改写它的成员和构造方法。
但是仔细想想,我们的内部类要实现的接口或者要继承的父类如果也是自己定义的是不是可以定义一个标记位让匿名内部类知道到底该去寻找哪个init()方法呢?
这些想法,构造代码块代替构造函数是网上查到的,剩下的是自己随意的一些发挥,至于到底有没有用,我也不知道。
不知道这样回答你满不满意,如果你硬是要给匿名内部类加一个构造函数的话,估计修改虚拟机的源代码应该能做到,无非是让它把内部类的类名告诉你,你再来通过类名new么。 |