• Java基础之内部类


    1.定义

      内部类就是在一个类的内部定义的类,内部类中不能定义静态成员,,内部类可以直接访问外部类中的成员变量,内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中

    代码

    public class Outer
    {
            int out_x  = 0;
            public void method()
            {
                Inner1 inner1 = new Inner1();
                public class Inner2   //在方法体内部定义的内部类
                {
                    public method()
                    {
                        out_x = 3;
                    }
                }
                Inner2 inner2 = new Inner2();
            }
    
            public class Inner1   //在方法体外面定义的内部类
            {
            }
            
    }

     2.方法体外部

      在方法体外面定义的内部类的访问类型可以是public,protecte,默认的,private等4种类型,他们决定这个内部类对外是否可见,创建内部类的实例对象时,一定要先创建外部类的实例对象,然后用这个外部类的实例对象去创建内部类的实例对象

    代码如下

    Outer outer = new Outer();
    Outer.Inner1 inner1 = outer.new Innner1();
    

    3.方法体外部

      在方法内部定义的内部类前面不能有访问类型修饰符,就好像方法中定义的局部变量一样,但这种内部类的前面可以使用final或abstract修饰符,这种内部类对其他类是不可见的其他类无法引用这种内部类,但是这种内部类创建的实例对象可以传递给其他类访问。这种内部类必须是先定义,后使用。这种内部类可以访问方法体中的局部变量,但是,该局部变量前必须加final修饰符。

      在方法外部定义的内部类前面可以加上static关键字,从而成为Static Nested Class,它不再具有内部类的特性,所有,从狭义上讲,它不是内部类。Static Nested Class与普通类在运行时的行为和功能上没有什么区别,只是在编程引用时的语法上有一些差别,它可以定义成public、protected、默认的、private等多种类型,而普通类只能定义成public和默认的这两种类型。在外面引用Static Nested Class类的名称为“外部类名.内部类名”。在外面不需要创建外部类的实例对象,就可以直接创建Static Nested Class,例如,假设Inner是定义在Outer类中的Static Nested Class,那么可以使用如下语句创建Inner类:

    Outer.Inner inner = new Outer.Inner();

      由于static Nested Class不依赖于外部类的实例对象,所以,static Nested Class能访问外部类的非static成员变量。当在外部类中访问Static Nested Class时,可以直接使用Static Nested Class的名字,而不需要加上外部类的名字了,在Static Nested Class中也可以直接引用外部类的static的成员变量,不需要加上外部类的名字。

      在静态方法中定义的内部类也是Static Nested Class,这时候不能在类前面加static关键字,静态方法中的Static Nested Class与普通方法中的内部类的应用方式很相似,它除了可以直接访问外部类中的static的成员变量,还可以访问静态方法中的局部变量,但是,该局部变量前必须加final修饰符。

  • 相关阅读:
    1924班网址
    20192414《网络空间安全导论》第一周学习总结
    H-Angry
    A-Plague Inc
    B-Rolling The Polygon
    F-Moving On
    A-Maximum Element In A Stack
    J-Word Search
    E-Pawns
    D-Lift Problems
  • 原文地址:https://www.cnblogs.com/156005140qq/p/6826824.html
Copyright © 2020-2023  润新知