继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

内部类

lijikai1937
关注TA
已关注
手记 4
粉丝 17
获赞 8

第一部分:内部类的类文件
对于每个内部类,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的实例的时候,分为两步:首先创建外部类的实例,
        //调用外部类的构造方法,外部类的构造方法又会去调用内部类的构造方法。
        //然后在创建内部类的实例,调用内部类的构造方法。
    }
}
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP