class Outter {
int i = 1;
public void method() {
final int i = 2;
class Intter {
int i = 3;
public void show() {
int i = 4;
System.out.println(i);
System.out.println(this.i);
}
}
Intter j = new Intter();
j.show();
}
}
class Demo1 {
public static void main(String[] args) {
Outter o = new Outter();
o.method();
}
}
局部内部类就是在方法中定义的一个类,它不会有static,private,public的修饰的,因为它们是修饰成员的修饰符。它可以被abstract,final修饰。
局部内部类中要想访问外部方法中的变量必须加一个final
因为外部类对象在调用它的方法后,它里面的变量会随着方法的出栈而消失,所以内部类再去访问它的时候就找不到。
当用final修饰的时候,该变量就会存在方法池中。调用的时候就能够找到。
abstract class Father {
public abstract void show();
}
class Outter {
public void method() {
class Son extends Father {
public void show() {
System.out.println("哈哈");
}
}
Son s = new Son();
s.show();
Father f = new Son() {
public void show() {
System.out.println("呵呵,长见识了吧");
}
};
f.show();
}
}
class Demo {
public static void main(String[] args) {
Outter o = new Outter();
o.method();
}
}
妈的各种类,真他妈的累,什么事情简单点不就好了?
你的局部内部类是可以继承的。在方法中创建对象再调用。之后创建外部类调用方法就可以通过局部内部类对象调用局部内部类的方法了。
什么又是匿名内部类?
这是通过接口实现的匿名内部类,简单地说匿名内部类就是当你只想调用一次方法不想创建对象在进行调用,那么就用这种格式来调用,大大简化了代码。