java中的内部类,分为 内部类,局部内部类,匿名内部类!
内部类: 顾名思义 定义在类的内部的类叫做 内部类!
局部内部类: 定义在局部函数中的 类,叫做 局部内部类!
匿名内部类: 没有名字的内部类! 玩 android 都知道,android 比较常见 匿名内部类!
内部类的优点:
1 内部类可以直接 访问 外部类的所有成员!
因为,当你调用外部类的时候,却生了 outer.this.成员变量或函数!
2 含有静态成员的内部类, 必须是静态的!
3 内部类一般用在设计中!
弊端:
1 内部类 不能直接创建, 需要在前面 添加 外部类!
2 外部类 访问 内部类
先创建内部类 对象, 在访问!
代码如下:
package stu.love.d; class Outer { int num = 6; //内部类 class Inner { public void show() { System.out.println("Hello World!"+num); } } public void func() { Inner in = new Inner(); in.show(); } } public class Innerdemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Outer out = new Outer(); out.func(); //直接创建内部类对象 // 内部类的类型 外部类.内部类 Outer.Inner in = new Outer().new Inner(); Outer.Inner in1 = out.new Inner(); } }
内部类定义为 静态的时候:
代码如下: 静态 直接用类名调用!
class Person { class Heart { } } class Outer { private static int num = 6; static class Inner { public static void show()//静态方法,其所在的内部类必须是静态的 { System.out.println("Hello World!"+num); } } public void func() { Inner in = new Inner(); in.show(); } } class Demo16 { public static void main(String[] args) { //调用静态内部类中的非静态方法 Outer.Inner in = new Outer.Inner(); in.show(); //调用静态内部类中的静态方法 Outer.Inner.show(); } }
局部内部类:
实际意义 不是很大哦!
因为,她定义在 函数中,生命周期比较短。
注意的是: 她 所调用的变量 奥,因为 出栈后 可能 就消失了!
代码:
局部内部类:如果访问其所在函数的局部变量,该局部变量必须是final的 class Outer { int num = 3; Object obj; public void func(final int x) { final int y = 6; <span style="white-space:pre"> </span>// 局部内部类: class Inner //extends Object { public void show() { System.out.println(y); } public String toString() { return "inner"+y; } } <span style="white-space:pre"> </span>// 用的话 在 函数内使用! obj = new Inner(); }
public void function() { obj.toString(); } } class Demo18 { public static void main(String[] args) { Outer out = new Outer(); out.func(4); out.function(); } }
内存解析图: