java内部类:成员内部类,局部内部类,静态内部类匿名内部类,重点介绍成员内部类,和静态内部类
成员内部类特点:
1,成员内部类中,不能定义静态成员,但是可以声明为static final
2,成员内部类,可以访问所有的外部成员,
3,在内部类中,直接访问外部变量名
4,在内部类中访问自己的变量直接用变量名
5,在内部类中访问自己的变量可以用this.变量名
6,在内部类中访问外部类中与内部类同名的实例变量用外部类名.this.变量名
7,如果内部类中没有与外部类同名的变量,可以直接用变量名访问外部类变量
看代码:
public class Outter {
private static int i =1;
private int j = 10;
private int k = 20;
public static void outer_f1() {
System.out.println("这是静态外部方法");
}
public void outer_f2 () {
System.out.println("这是动态外部方法");
}
//成员内部类中,不能定义静态成员,但是可以声明为static final
//成员内部类,可以访问所有的外部成员
public class Inner {
int j = 100;
int inner_i =100;
void inner_f1() {
//在内部类中,直接访问外部变量名
System.out.println(i);
//在内部类中访问自己的变量直接用变量名
System.out.println(inner_i);
System.out.println(j);
//在内部类中访问自己的变量可以用this.变量名
System.out.println(this.j);
//在内部类中访问外部类中与内部类同名的实例变量用外部类名.this.变量名
System.out.println(Outter.this.j);
//如果内部类中没有与外部类同名的变量,可以直接用变量名访问外部类变量
System.out.println(k);
outer_f1();
outer_f2();
}
}
}
外部类非静态方法访问成员内部类
public void outer_f3 () {
Inner inner = new Inner();
inner.inner_f1();
}
外部类的静态方法访问成员内部类,与在外部类外部访问成员内部类一样
但是:创建外部类对象,根据外部类对象建立内部类对象
public static void outer_f4() {
//创建外部类对象
Outter outter = new Outter();
//根据外部类对象建立内部类对象
Inner inner = outter.new Inner();
inner.inner_f1();
}
静态内部类:
可以直接访问外部的静态类,但是非静态,需要new出一个外部对象来调用
//静态内部类
public static class Inner_i2 {
static int j = 100;
int inner_i =100;
void inner_f1() {
Outter outter = new Outter();
//在内部类中,直接访问外部变量名
System.out.println(i);
//在内部类中访问自己的变量直接用变量名
System.out.println(inner_i);
System.out.println(j);
//在内部类中访问自己的变量可以用this.变量名
System.out.println(this.j);
//在内部类中访问外部类中与内部类同名的实例变量用外部类名.this.变量名
System.out.println(outter.j);
//如果内部类中没有与外部类同名的变量,可以直接用变量名访问外部类变量
System.out.println(outter.k);
outer_f1();
outter.outer_f2();
}
}
在外部访问静态和非静态内部类:
静态内部类可以直接new出来,但是非静态就需要先new 出外部的类,在外部类对象上new 出内部类
public static void main(String[] args) {
Outter outter = new Outter();
Inner inner = outter.new Inner();
inner.inner_f1();
System.out.println("内部类");
//静态内部类可以直接new出来
Inner_i2 i2 = new Inner_i2();
i2.inner_f1();
}