JAVA-内部类详解

内部类的概念:

    在一个类的内部嵌套定义的类称为内部类。

内部类的特点:

   (1)它的类名在定义它的类或程序段中或在表达式内部可以匿名使用。

   (2)外部使用它时必须给出类的全名。

   (3)内部类的类名不允许与它包含的类名相同。

   (4)内部类可以使用它所在类的静态成员变量和实例成员变量,

             也可以使用它所在类的方法中的局部变量。

    (5)内部类不仅可以用abstract修饰定义为抽象类,

             也可用private或protected定义,

             同时还要注意,内部类可作为其他类的成员,

             而且可访问它所在类的成员,除static内部类外,不能在类中声明static成员。

实列详解:

     public class OutClassTest {//外部类

         int age;

         int out1=1;//外部类 非静态变量(类变量)

         static int out2=1;//外部类 静态变量(成员变量)

        void out(){//外部类 非静态方法

            System.out.println("非静态");

        }

   static void outstatic(){//外部类 静态方法

            System.out.println("静态");

        }

   public class InnerClass{//非静态内部类 不能有静态成员变量

            int eat =2;

        //    static int sleep = 3;

            void InnerClass(){//非静态内部类方法

                System.out.println(eat);

                OutClassTest outClassTest =new OutClassTest();

                System.out.println("InnerClass!");

                System.out.println(outClassTest.age);//非静态内部类可以访问外部类所有属性

                System.out.println(out2);//访问外部类 非静态变量(类变量)

                System.out.println(out1);//访问 外部类 静态变量(成员变量)

                out();//非静态内部类能够访问外部类的非静态成员

                outstatic();//非静态内部类能够访问外部类的静态成员

            }

// static void inner(){}  static int i=1; 非静态内部类不能有静态成员(方法、属性)

        }

public static class InnerstaticClass{//静态内部类 有静态成员变量 实例成员变量(非静态成员变量)

            int eat =2;

            static int sleep =3;

            void InnerstaticClass(){

   System.out.println("InnerstaticClass");

                //  System.out.println(out1);//

//    out();

                System.out.println(out2);// 静态内部类只能够访问外部类的静态成员

                outstatic();// 静态内部类只能够访问外部类的静态成员

            }

static void innerstatic(){}static int i=1;//静态内部类能有静态成员(方法、属性)

                  void i(){}//静态内部类能有非静态成员(方法、属性)

            int a =2;

        }

public static void main(String args[]){

// OutClassTest.InnerClass innerClass = new OutClassTest().new InnerClass();

            //定义非静态成员内部类对象的语法是:外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

            InnerstaticClass innerstaticClass =new InnerstaticClass();

            /*new OutClassTest.InnerstaticClass();*/

            //定义静态成越内部类对象的语法 :内部类名 对象名 = new 内部类();

        }

}

注:仅个人见解,如有不对之处,望指出,定加以改正。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转载:https://juejin.im/post/5a903ef96fb9a063435ef0c8 本文将会从以...
    福later阅读 3,177评论 0 3
  • 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有...
    Java架构师Carl阅读 3,244评论 0 3
  • Java 内部类 分四种:成员内部类、局部内部类、静态内部类和匿名内部类。 1、成员内部类: 即作为外部类的一个成...
    ikaroskun阅读 5,069评论 0 13
  • 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有...
    dlihasa阅读 5,353评论 0 12
  • 2017.10.17晚22:15下班后一如往常先烧一桶水然后…… 静静的听着[书房]靠在床边,手里拿着本[白夜行]...
    帅啊宁阅读 2,187评论 0 0

友情链接更多精彩内容