今天遇到了一个题,涉及到匿名内部类的构造器问题,起初想当然地认为,匿名内部类连名字都没有,怎么可能有构造器,但是一经过测试,傻眼了。原来在匿名内部类中的构造代码块充当了构造器的作用。光说无益,上代码。
Student类
public class Student {
private String name;
public void run(){
System.out.println("好好学习");
}
public Student() {
super();
System.out.println("大傻逼!");
}
public Student(String name) {
super();
this.name = name;
}
}
测试类:
public class Test {
public static void main(String[] args) {
Student s=new Student() {
public void run() {
System.out.println("我是学生,我要好好学习!");
}
//调用无参构造器
{
System.out.println("我是大傻逼");
}
};
s.run();
}
}
输出结果:
大傻逼!
我是大傻逼
我是学生,我要好好学习!
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
既然能使用无参构造器,那有参数构造器怎么定义呢?构造代码块又没有传递参数的地方,怎么办?
其实只需要在new Student(){//省略} 的小括号中传参就可以了。