//外部类
public class Out{
private int yes = 0;
int data = 1 ;
//内部类
public class In{
int yes = 2 ;
public void print() {
System.out.println("外部类yes:" + Out.this.yes );//调用外部类和内部类同名变量或属性的方法
System.out.println("外部类中data:" + data); //调用外部变量
System.out.println("内部类中yes:" + yes );
}
}
public static void main(String[] args) {
//创建外部类的对象,利用外部类对象创建内部类对象,调用内部类对象的方法
//第一种调用方式
Out outObject = new Out();
In inMethod1 = outObject.new In() ;
inMethod1.print();
//第二种调用方式
Out.In inMethod2= new Out().new In() ;
inMethod2.print();
}
}
输出:
外部类yes:0
外部类中data:1
内部类中yes:2
外部类yes:0
外部类中data:1
内部类中yes:2
tips:
1. 定义内部类后,须用外部类对象来创建内部类对象,而不能是:内部类 对象名 = new 内部类( );,只能先创建外部类对象再 通过外部类对象引用内部类的方法、属性等:
内部类 对象名 = 外部类对象.new 内部类( ) ;
或 外部类.内部类 对象名 = new 外部类().new 内部类();
即访问成员内部类的唯一途径就是通过外部类的对象!
2.内部类内不允许有任何静态声明!
3.如果外部类和内部类具有相同的成员变量或方法,内部类成员变量或方法具有更高的优先级,如果要访问外部类的成员变量可以使用关键字this
4.内部类可以看做外部类的一个成员变量的位置,内部类可以使用任意访问控制符,如 public 、private 等
5. 内部类可以直接访问外部类中的数据,而不受访问控制符的影响
6.内部类也是独立的类,在编译过程中会产生独立的.class文件,但其命名方式为:外部类名$内部类名.class(普通类:类名.class)
7.静态内部类不能直接访问外部类的非静态成员,而是通过 new外部类().成员 访问 ; 访问同名外部类静态成员通过 类名.静态成员
8.定义在外部类的方法中的类称为方法内部类,方法内部类只在该方法内有效,且方法内部类不能有访问控制符和static修饰,在方法内引用直接用 方法内部类 对象名 = new 方法内部类()