黑马程序员——内部类

来源:互联网 发布:光子去红血丝知乎 编辑:程序博客网 时间:2024/06/08 16:30

                       黑马程序员——内部类


内部类的分类:   

        分成员内部类、局部内部类和匿名类


成员内部类:

            1在外部类中访问内部类规则:

                       (1)内部类可以直接访问外部类中的成员,包括私有,之所以可以直接访问外部类中的成员是因为内部                   类中持 有一个外部类的引用,格式为:外部类名.this
                         (2)外部类要想访问内部类必须先建立内部类的对象。   

           2外部其他类访问一个内部类格式:

                   (1)当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类上直接建立内部类对象。格式为:外部类名.内部类名  变量名=外部类对象.内部类对象
                   (2)在外部其他类中直接访问被Static修饰的内部类中的非静态成员,其格式为:  new 外部类名.内部类名().方法名()
                    (3)在外部其他类中直接访问被static 修饰的内部类中的静态成员时,其格式为:外部类名.内部类名.方法名( ),           

       3位置:

        成员内部类在类中方法外,其写法跟普通类一样,有属性和方法。

           主意:一般情况下类是不能被Static,private,修饰的,但是由于成员内部类属于一个类中的成员,所以他是可以被Static,private修饰的,但是被static修饰的内部类只能访问外部类中的静态成员,出现了访问局限性。如果在一个类的静态方法中,要想访问其内部类,这个内部类也必须是静态的。其实如果你在本类非静态方法中,如果想用这个非静态的内部类,你可以把这个类当成一个普通的类来用,通过new对象来调用其成员方法



局部内部类:

    位置:在类的方法中
    主意:该局部内部类是不可以被成员修饰符所修饰的,该内部类还是可以直接访问其外部类中的成员,因为还持有外部类的引用,但是该局部内部类要想访问他所在函数中的局部变量,该变量必须被final修饰,但是在jdk1.7版本中,可以不用final修饰,如果该类所在的方法是静态方法,那莫该类一定是静态类


匿名内部类:

            
    根据这个内部类的位置,他可以是某个类中的成员内部类对象,也可以是某个类中的局部内部类对象,只是没有指向他的一个引用;一般情况匿名内部类都是定义在方法中的,因为我们定义匿名内部类一般都是要调用其方法的,属于语句,而语句只能写在方法里,所以一般匿名内部类都是局部内部类。当然,他也可以被说成是某个类或接口的一个子类,说法都对。他可以覆盖父类中的一些方法,同样父类中的非私有属性,和方法他都是可以调用的,跟平常类的继承是没有太大区别的,注意:在写这个内部类时,一定要想好,你到底想让他干嘛,不要为了单纯写内部类而写,如果你不调用他的方法,这个内部类是没有意义的,如果你调用这个内部类的多个方法,最好给他一个指向他的引用。



0 0
原创粉丝点击