今天在复习内部类的时候,发现了两个问题:
第一个是方法内部类:
JDK 1.7以前,方法内部类中,方法的参数和局部变量,必须有final修饰才可以访问。但是我今天用JDK1.8后发现,貌似不需要用final修饰了。。。
public class MethodInnerClass {
private String str="我是外部类的成员变量";
private String outerStr="我是外部类的成员变量";
public void outerMethod() {
System.out.println("我是外部类地方法");
}
public void method(String s) {
class InnerClass{
private String str="我是方法内部类的成员变量";
public void print() {
System.out.println("我是方法内部类地方法,访问方法参数:"+s);
System.out.println("我是方法内部类地方法,访问内部类的成员变量:"+str);
System.out.println("我是方法内部类地方法,访问外部类的成员变量:"+outerStr);
System.out.println("我是方法内部类地方法,访问外部类与内部类同名的成员变量:"+MethodInnerClass.this.str);
}
}
new InnerClass().print();
}
public static void main(String[] args) {
MethodInnerClass out=new MethodInnerClass();
out.method("成员内部类");
}
}
但是在JDK 1.7下确实报错, 不可以直接访问,需要用final修饰才行,,,
第二个就是匿名内部类,貌似不可以实现了,,,,JDK 1.7以前实现匿名内部类的方式貌似在JDK 1.8下会报错,,,编译都过不去
public class AnonymousInnerClass {
private String str="我是外部类的成员变量";
public Inner getInner(final String name, String city) {
return new Inner() {
private String nameStr = name;
public String getName() {
return nameStr;
}
};
}
}
这个在JDK 1.7下求验证,,,,,