成员内部类
在类的成员位置
使用:
外部类.内部类 对象名 = 外部类对象.内部类对象;
代码:
/**
* 在内部类中访问外部类:使用 外部类.this
*/
public class InnerDemo1 {
public static void main(String[] args) {
Outer.Inner inner = new Outer().new Inner();
inner.show();
}
}
class Outer{
public int num = 10;
class Inner{
public int num = 20 ;
public void show(){
int num = 30;
System.out.println(num);//30
System.out.println(this.num);//20
System.out.println(Outer.this.num);//10
}
}
}
局部内部类:
定义在方法内的类
使用:
可以创建内部类的对象,通过内部类对象操作内部类成员
代码:
public class InnerDemo2 {
public static void main(String[] args) {
Outer1 inner = new Outer1();
inner.show();
}
}
class Outer1 {
public void show() {
//应该使用final修饰,但是1.8没有报错呀?
//查看class文件发现:int num = 30; 变成了 final int num = 30;
int num = 30;
class Inner1 {
public void method() {
/*
* 查看class文件发现:num还是num,而不是30;
*/
System.out.println("局部内部类--method"+num);
}
}
Inner1 inner1 = new Inner1();
inner1.method();
}
}
局部内部类访问局部变量的注意事项?
局部变量需要使用final修饰
1.8之前:局部内部类使用局部方法,书写时使用final修饰,
编译后的class文件中使用变量位置是变量值
1.8版本:局部内部类使用局部方法,书写时不使用final修饰,
编译后的class文件中自动给变量加入final修饰,且使用变量位置还是变量名
说明:不确定是1.7之前还是1.8之前
网友评论