内部类使用无参构造函数:
interface MyInterface{
void showMe();
}
public class Outer {
private String name = "DASHA";
public MyInterface getInner(){
String text = "We are ";
//这里,创建内部类实例时,调用的无参构造函数
return new MyInterface(){ //之后的代码是实现了MyInterface这个接口
@Override
public void showMe() {
System.out.println(text + name);
}
}; //这个分号是必须的哟
}
public static void main(String[] args){
MyInterface mi = new Outer().getInner(); //这里需要注意的是就是传入的是false,inner类也会被编译出来
mi.showMe();
}
}
内部类使用有参构造函数:
要使用有参构造函数,那么内部类只能是继承另一个类,而不是实现一个接口,因为匿名类没名字,我们无法在内部类中定义一个的构造函数
class BaseClass{
private String name;
public BaseClass(String name){
this.name = name;
}
public BaseClass(){
this.name = "PIG";
}
void showMe(){
System.out.println("My name is " + name);
}
}
public class Outer {
public BaseClass getInner(String name){
//可能是版本问题吧,我只有在内部类中没对name进行写操作,就不用final去修饰name。
//但是,如果出现写操作,就是提示name必须要用final修饰
//这里,创建内部类实例时,调用的有参构造函数
return new BaseClass(name){ //之后的代码是扩展BaseClass
private String myName;
{
//虽然我们无法为匿名类写一个构造函数,但是我们可以在这里初始化它的属性
myName = "DA XIAN";
}
void test(){
System.out.println(myName);
}
}; //这个分号是必须的哟
}
public static void main(String[] args){
BaseClass mi = new Outer().getInner("Simon");
mi.showMe();
//无法调用test,因为返回的内部类已经被转换成 BaseClass类型了。
//mi.test();
}
}