第一部分:内部类的类文件
对于每个内部类,Java编译器会生成独立的.class文件。这些类文件的命名规则如下:
1)成员内部类:外部类的名字$内部类的名字。
2)局部内部类:外部类的名字$数字和内部类的名字。
3)匿名类:外部类的名字$数字。
以下程序中定义了各种类型的内部类:
class A{
static class B{ //成员内部类,对应A$B.class
}
class C{ //成员内部类,对应A$C.class
class D { //成员内部类,对应A$C$D.class
}
}
public void method(){
class E{}//局部内部类 1,对应A$1E.class
B b=new B(){};//匿名类 1,对应A$1.class
C c=new c(){};//匿名类 2,对应A$2.class
}
public void method2(){
class E{}//局部内部类 2,对应A$2E.class
}
}
变量按照作用于可以划分为:成员变量和局部变量。
成员变量分为实例变量,静态变量。
内部类分为成员内部类和局部内部类。
成员内部类分为实例分为实例内部类和静态内部类。
第二部分:子类与父类中的内部类同名
class Outer{
Inner in;
Outer(){
in=new Inner();//构造Outer.Inner类的实例
}
public class Inner{
public Inner(){
System.out.println("inner of Outer");
}
}
}
public class SubOuter extends Outer{
class Inner{
public Inner(){
System.out.println("inner of SubOuter");
}
}
public static void main(String args[]){
SubOuter.Inner in1=new SubOuter().new Inner();
//在创建SubOuter.Inner的实例的时候会调用父类的构造方法,
//父类的构造方法又会创建构造Outer.Inner类的实例,所以这里的打印结果为:
//inner of Outer和inner of SubOuter
Outer.Inner in2=new Outer().new Inner();
//在创建Outer.Inner的实例的时候,分为两步:首先创建外部类的实例,
//调用外部类的构造方法,外部类的构造方法又会去调用内部类的构造方法。
//然后在创建内部类的实例,调用内部类的构造方法。
}
}
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦