内部类在开发中不是首要选择,但是一定会出现,现在先学习语法和使用;
一、内部类的基本概念
所谓的内部类指的是在一个类的内部继续定义类的结构所形成的代码形式
范例1:
内部类访问外部类
范例2:
外部类访问内部类
在定义内部类时会发现问题:类的组成结构为属性和方法两个部分,但是现在有多处一个类。
结论:
内部类的缺点:破坏了程序的结构。
内部类的优点:内部类可以方便的访问外部类之中定义的私有成员;同理外部类也可以方便 的访问内部类的私有成员
范例3:
升级范例1,内部类访问外部类的私有属性
从访问属性的角度上讲,只要访问类之中的属性一定要加上“this”。在内部类访问外部类msg属性时,应加上“this”才算合理;但是却无法编译通过,因为无法找到上下文;直接使用“this.属性”表示的是Inner类的属性明显错误,应该使用“外部类.this.属性”才表示内部类访问外部类的私有属性;
范例4:
由外部操作内部类
内部类可以通过主方法直接使用,这时使用的语法如下:
外部类 .内部类 内部类对象 = new 外部类(). new 内部类();
原因:先实例化外部类对象,之后再实例化内部类对象,因为内部类有可能访问外部类之中的属性,而所有的属性一定要在关键字new之后分配空间产生
如果一个内部类不想让外部使用,只希望在内部使用,可以添加private声明内部类
二、使用static定义内部类
内部类不想受到外部类之中属性的控制,而可以直接去实例化对象,那么在定义内部类时就可以使用static关键字声明,而且使用static声明的内部类严格来讲就是一个外部类,只能够调用所在外部类的static属性;
范例5:
语法:
外部类 .内部类 内部类对象 = new 外部类 .内部类();
使用static修饰后的内部类,若想使用外部类的属性则外部类属性也应该使用static关键字;
四、在方法中定义内部类
理论上内部类可以在任意位置上定义,这就包括了:类中,代码块中,方法中;
范例6:
范例7:
在方法中定义的内部类若想访问方法的参数或者方法定义的变量,则方法或变量前应加上一个关键字“final”(此处的final这是个标记并非真实使用)