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();
}
}
内存解析图: