package InnerClass;
/**
* Created by Mr.Meng on 2016/7/4.
*/
//方法里的内部类是无法加static关键字的。
//不是静态内部类都不能有静态变量和方法。
//静态代码块里不能写方法,无论静态还是实例方法,但可以调用外部类的静态方法。
//方法定义局部内部类同方法定义局部变量一样,不能使用private、protected、public等访问修饰说明符修饰,也不能使用static修饰,但可以使用final和abstract修饰。
//这里有个问题就是外部方法的变量为什么要是final的内部类才可以访问呢。??
public class LocalInnerClass {
private String a="我是外部类的实例变量";
//-----------------
{
class InnerClass{
public String a="我在外部类的局部块里";//
public void method(){
System.out.println(a);
}
public void method1(){
InnerClass.this.method();//这里调用的InnerClass是本块里的,这个内部类的范围也就是本块里。
}
}
InnerClass innerClass=new InnerClass();
innerClass.method1();
}
//-----------------
static {
class InnerClass{
public String a="我在外部类的静态块里";//
public void method(){
System.out.println(a);
}
}
InnerClass innerClass=new InnerClass();
innerClass.method();
}
//-----------------
public LocalInnerClass(){//外部类的构造函数
class InnerClass{
public void method(){
System.out.println("我是外部类的构造方法"+a);//非
}
}
InnerClass innerClass=new InnerClass();
innerClass.method();
}
//-----------------
public void method(){
final String a="a";
System.out.println("我是外部类的实例方法");
class InnerClass{
// static String a="a";error
public void InnerClass(){
System.out.println(a);//内部类想要调用外部方法的变量,外部方法的变量必须是final的
System.out.println(LocalInnerClass.this.a);
System.out.println("我是外部类的实例方法的内部类");
}
}
InnerClass innerClass=new InnerClass();
innerClass.InnerClass();
}
//-----------------
public static void staticMethod(){
class InnerClass{
public void method(){
// System.out.println(LocalInnerClass.this.a);error
System.out.println("我是静态方法里的内部类");
}
}
InnerClass innerClass=new InnerClass();
innerClass.method();
}
public static void main(String[] args) {
LocalInnerClass localInnerClass=new LocalInnerClass();
localInnerClass.method();
LocalInnerClass.staticMethod();
}
}
结果如下:
我在外部类的静态块里
我在外部类的局部块里
我是外部类的构造方法我是外部类的实例变量
我是外部类的实例方法
a
我是外部类的实例变量
我是外部类的实例方法的内部类
我是静态方法里的内部类