引入
实例内部类与静态内部类很像,可以先看一下我前面写的关于静态内部类
概念
不加任何修饰的内部类就是实例内部类
格式
class A{
class B{
}}
例子
class RealOuter { private int a=1; public static int b=2; class RealInner{ private int c=3; public static final int d=6; //要允许静态存在的话就得加final, //原因就是可以将实例内部类当作外部类的一个实例成员 //实例内部类实例化时会依赖外部类,而静态变量不依赖对象的 public void testInner(){ RealOuter realOuter=new RealOuter(); System.out.println(realOuter.a);//通过外部类对象访问与内部类同名的变量 System.out.println(RealOuter.this.a); System.out.println(this.a); System.out.println(b);//直接访问外部类成员变量 System.out.println(d);//访问内部类的静态最终变量 System.out.println("test"); fun();//直接调用外部类的成员方法 } } public void fun(){ System.out.println("RealOuter的成员方法"); } public static void main(String[] args) { //两种实例化实例内部类的方法、 //实例化外部类,在实例化内部类 RealOuter realOuter=new RealOuter(); RealInner realInner=realOuter.new RealInner(); realInner.testInner(); //合并外部类和内部类实例话内部类 RealInner realInner1=new RealOuter().new RealInner(); realInner1.testInner(); } }
代码执行结果:
1
10
2
6
test10
RealOuter的成员方法
1
10
2
6
test10
RealOuter的成员方法
总结
1.实例内部类不允许存在静态变量,除非该变量被final修饰。
2.实例化实例内部类需要通过实例化外部类,通过外部类对象实例化内部类对象,注意格式不要与 静态内部类的实例化混淆。
3.外部类的任何成员都可以被实例化内部类访问。
4.要分别访问外部类和内部类地同名成员,仅仅只是变量名,会采取就近原则,要用外部类对象.变量或者外部类对象.this. 变量名和this.变量名区别。
5.在外部类中无法直接访问内部类的成员,必须通过内部类的实例化对象。