A:内部类
在类中定义的类就是内部类
B:内部类访问特点
a:内部类可以直接访问外部类的成员,包括私有。原因是:他能获取到外部类名的引用 外部类名.this
b:外部类要访问内部类的成员,必须创建对象。
c:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
Outer.Inner in = new outer().new Inner()
public class Demo1_InnerClass { public static void main(String[] args){ #创建类的对象 Outer.Inner in = new Outer().new Inner(); in.method(); } } #定义外部类Outer以及内部类Inner class Outer{
#外部类的私有成员变量
private int num = 10; class Inner{ public void method(){ System.out.println(num); } } }
注意一:如果内部类被私有,那么就得在外部类中提供一个调用私有类的方法
public class Demo1_InnerClass { public static void main(String[] args){ Outer o = new Outer(); o.print(); } } class Outer{ private int num = 10; #内部类被私有化 private class Inner{ public void method(){ System.out.println(num); } } #定义一个可以调用私有内部类的方法 public void print(){ Inner i = new Inner(); i.method(); } }
注意二:如果内部类是静态的,调用方法直接是:外部类名.内部类名 对象名 = 外部类名.内部类对象(因为static修饰的可以直接用类名.调用),如果静态内部类里面的方法也是静态的,直接就用类名调用就可以了
class Outer{ private int num = 10; static class Inner{ public void method(){ System.out.println("method"); } public static void print(){ System.out.println("print"); } } } public class Demo1_InnerClass { public static void main(String[] args){ Outer.Inner oi = new Outer.Inner(); oi.method(); Outer.Inner.print(); } }
注意三:如果想直接访问外部类的成员变量,那么就是Outer.this
class Outer {
public int num = 10;
class Inner {
public int num = 20;
public void show() {
int num = 30;
System.out.println(num); #输出30,就近原则
System.out.println(this.num); #输出20,调用本类成员变量
System.out.println(Outer.this.num); #输出10,获取外部类引用
}
}
}