如题!局部内部类和匿名内部类都必须用上接口??
老师,这个怎么写成不用接口??
interface OutInterface2 { //定义接口
}
class OuterClass3 {
public OutInterface2 doit(final String x) { // doit()方法参数为final类型
// 在doit()方法中定义一个内部类
class InnerClass2 implements OutInterface2 {
InnerClass2(String s) {
s = x;
System.out.println(s);
}
}
return new InnerClass2("doit");
}
}
你搞懂两个概念就容易理解了这个问题了:
1. 局部变量的有效范围。不管是成员内部类还是匿名内容类,他们的有效范围就在最近的大括号之内,超出这个括号范围以外的地方是无法使用的。
2. 类的继承关系。不管是继承类,还是实现接口,内部类都建立了一个“子类”身份。如果想要在超出有效范围的地方调用子类逻辑,就需要将子类转为父类对象调用。这属于面相对象开发的特点。
针对你提出的这个问题,可以从两方面解决:
1. 成员内部类不要在有效范围以外的地方使用。只在doit()里面创建并调用内部类对象。
2. 将父接口改为父类。把OutInterface2改成类,并在OutInterface2类中创建构空的造构造方法,让子类去重写这个构造方法,也能实现相同的效果。