内部类主要有三种:静态内部类,实例内部类,局部变量内部类
1.静态内部类,该类被static修饰,并且是成员变量,它只能访问外部类被static修饰的方法以及字段(这种说法只局限于不再内部类中创建外部类的对象)
public class Outer{
public String name;
/**静态内部类
* 只能访问外部类静态的字段
* 可以有静态和非静态的方法以及字段
* */
public static class StaticClass{
public void test(String name){
System.out.println("呵呵呵呵"+name);
}
public String aaaString="aaaa";
public static void show(){
System.out.println("show");
}
}
//得到其内部类对象的方法
public static void main(String[] args) {
//静态内部类
Outer.StaticClass staticClass = new Outer.StaticClass();
//静态内部类 静态方法调用
Outer.StaticClass.show();
}
}
2.实例内部类,没有被static修饰,是外部类的成员变量,该内部类不能有static的字段和方法,否则就要将其声明为static的,该内部类中可以直接访问外部类所有的字段和方法,因为内部类持有外部类.this对象。test方法中name指的是方法的变量,而Outer.this.name 指的外部类的name字段
public class Outer{
public String name;
/** 实例内部类声明在成员变量上
* 不能有静态方法或者字段
* */
public class InnerClass1{
public String a ="asdf";
public void test(String name){
//Outer.this.name 代表的是外部的类
Outer.this.name = name;
}
public void get(){
System.out.println(Outer.this.name);
}
//得到其内部类对象的方法
public static void main(String[] args) {
//实例内部类
Outer.InnerClass1 innerClass1 = new Outer().new InnerClass1();
}
}
}
3.局部变量内部类,有一点需要注意,该内部类访问局部变量时,该局部变量需要加上final 修饰,该内部类不能使用staic修饰,故该内部类不允许有静态的方法或者字段,该内部类,内部也持有外部类.this对象,可以访问外部类的所有方法和字段
public class Outer{
public String name;
public void test(String address){
/**内部类声明在局部变量上
* 类不能使用static修饰
* 字段不能被static修饰
* */
class InnerClass2{
private String name;
public int age;
public void test(String name){
Outer.this.name = name;
}
}
InnerClass2 innerClass2 = new InnerClass2();
}
}