一.成员内部类
①定义: 把一个类当做普通成员变量那样定义。
class OuterClass{
int a=0;
class InnerClass{
int b=1;
void test(){
System.out.println(a);
}
}
}
//主方法中:
OuterClass out=new OuterClass();
OuterClass.InnerClass inner=out.new InnerClass();
②成员内部类的使用:
a. 内部类的票的类型有固定格式为 外部类名称+”.”+内部类名称,构造方法为 new +
内部类类名+”()”;
b. 如果要生成内部类的实例,需要依靠外部类的实例.
c. 内部类会持有外部类类型的一张票(注意课上所演示的内存示意图),可以利用所持有的
这张外部类类型的票直接访问外部类的成员变量和成员方法(包括静态成员变量和成员
方法)
d. 外部类不可以直接访问到内部类的任何成员变量和成员方法
e. 注意内部类中两种不同的 this 所指向的内存区别
f. 实际的编译会生成两个 class 文件,分别为 OuterClass.class 和 OuterrClass$InnerClass.class
g. 内部类里面不能定义静态的成员变量或者成员方法
(完全掌握的标准 是你可以将内部类提出来写 并且达到内部类的效果,这里需要的基
础是大家对 this 关键字作为凭证的用法完全掌握)
二.静态内部类
①定义: 把一个类当做静态成员变量那样定义。
class OuterClass{
static int a=0;
void test(){
System.out.println(OutClass.InnerClass.b);
}
static class InnerClass{
static int b=1;
void test(){
System.out.println(a);
}
}
}
②静态内部类的使用:
a.内部类的票的类型有固定格式为 外部类名称+”.”+内部类名称
b.如果要生成内部类的实例,不需要依靠外部类的实例
c. 内部类只可以直接访问到外部类的静态成员变量和静态成员方法
d. 外部类不可以直接访问到内部类的任何成员变量和成员方法(包括静态)
d. 实际的编译会生成两个 class 文件,分别为 OuterClass.class 和 OuterrClass$InnerClass.class
三.匿名内部类
①出现了一个实例,这个实例并不属于我们所编写的任何模板,并且都伴随着向上转型的
过程
②代码举例:
③在①中出现的实例若出现在成员方法中或是成员变量中,则这个实例实际上可以转换
成成员内部类的一个实例,则这个实例拥有一个外部类实例的权限,具有成员内部类
的所有特点。如果出现在静态方法中或静态成员变量中,则这个实例实际上可以转换
成静态内部类的一个实例,则具有静态内部类的所有特点。
四.局部类
Java内部类
最新推荐文章于 2024-05-21 22:13:42 发布