(3)内部类分类:
1:成员位置
private 安全 隐藏内部类 提供公共的访问方法
static 方便调用
外部访问非静态成员内部类 外部类名.内部类名 变量 = 外部类对象.内部类对象;
外部访问静态成员内部类 外部类名.内部类名 变量 = 外部类.内部类();
代码:
class Body
{
private int weight = 100;
private class Heart
{
public void operator()
{
System.out.println("心脏搭桥手术");
}
}
public void method()
{
if(如果你是医生)
{
Heart h = new Heart();
h.operator();
}
}
}
class Test
{
public static void main(String[] args)
{
//Body.Heart bh = new Body().new Heart();
//bh.operator();
Body b = new Body();
b.method();
}
}
2:局部位置
定义在方法中。
局部内部类访问局部变量必须加final修饰。
延迟生命周期。
代码:
class Outer
{
public void method()
{
final int num = 10;
//定义类
class Inner
{
public void show()
{
System.out.println(num);
}
}
//创建对象
Inner i = new Inner();
i.show();
}
public void function()
{
//错误
//Inner i = new Inner();
//i.show();
}
}
class InnerTest3
{
public static void main(String[] args)
{
Outer o = new Outer();
o.method();
}
}
(4)内部类字节码文件命名规则
成员内部类:外部类$内部类
有多个成员内部类的 会多个 外部类$1
局部内部类:外部类$1内部类
(5)匿名内部类(掌握)
1:是定义在局部位置的没有名字的内部类。
2:前提
存在一个类,抽象类,或者接口。
3:格式
new 类或者接口名()
{
重写方法;
}
本质理解:其实这是一个继承类或者实现接口的匿名的子类对象。
|
|