成员内部类类似于成员变量,在一个类的内部,但是在方法之外定义。
1、实例内部类
实例内部类于实例成员变量类似。访问级别有4种:共有的、私有的、保护的和默认的
在内部类中this表示当前内部类对象(例如:this.x),引用外部类对象西药使用“外部类名.this”(例如:Outer.this.x))
代码案例
//外部类
public class Outer {
//外部类成员变量
private int x=10;
//外部类方法
private void print(){
System.out.println("调用外部方法...");
}
//测试调用内部类
public void test(){
//实例化内部类Inner
Inner inner=new Inner();
//调用方法
inner.display();
}
//内部类
class Inner{
//内部类成员变量
private int x=5;
//内部类方法
void display(){
//访问外部类的成员变量x,这里Outer.this.x表示外部类Outer下变量x
System.out.println("外部类的成员变量x ="+Outer.this.x);
//访问内部类的长远变量x,这里this.x表示当前内部类下的变量X
System.out.println("内部类的成员变量x ="+this.x);
//这里x访问时外部类变量X
System.out.println("内部类的成员变量x ="+x);
//调用外部类的成员方法
Outer.this.print();
print();
}
}
}
外部类Inner
public class Inner {
public void display() {
}
}
public class StaticOuter {
//通过外部类访问内部类
Outer outer =new Outer();
outer.test();
System.out.println("---直接访问内部类---");
//直接访问内部类
Outer.Inner inner = outer.new Inner();
inner.display();
}
2、静态内部类
静态内部类使用的static声明,类似于静态成员变量。他只能访问外部类的静态成员,所有使用场景很少,我们一般情况下使用静态内部类是为了提供一个有别于包的命名空间。
代码案例
//外部类
public class View {
//外部类实例变量
private int x=20;
//外部类静态变量
private static int staticx=10;
//静态内部类
static class Button{
//内部类方法
void onClick(){
//访问外部类的静态成员
System.out.println(staticx);
//不能访问外部类的非静态成员
//System.out.println(x);//编译错误
}
}
}
在另外的内调用内部类
public class ViewTest {
public static void main(String[] args) {
//直接访问内部类
View.Button button = new View.Button();
button.onClick();
}
}