java基础篇——内部类


                 内部类


一  什么是内部类:


     例如:

class  Demo
{
    private  int x = 3;
    class Inner
    {
        void function()
        {
            System.out.println("");
        }
    }
}


   称类Inner  为内部类


二  内部类的特点


1.内部类可以直接访问外部类中的成员,包括类中的私有成分

 例如————

class  Demo
{
    private  int x = 3;
    class Inner
    {
        void function()
        {
            System.out.println(""+x);//其中X是外部类的私有变量
        }
    }
}


2.外部类要访问内部类,必须建立内部类对象



例如————

class  Demo
{
    private  int x = 3;
    class Inner
    {
        void function()
        {
            System.out.println("");
        }
    }
    void method()
    {
        Inner  in = new Inner();//必须建立内部类对象才可以访问
        in.function();
    }
}


          3. 直接访问内部类成员

class  Demo
{
    private  int x = 3;
    class Inner
    {
        void function()
        {
            System.out.println("");
        }
    }

    void method()
    {
        Inner  in = new Inner();//必须建立内部类对象才可以访问
        in.function();
    }
}
class Test {
    public static void main(String[] args)
        {
        Demo.Inner    in = new Demo().new Inner();
        in.function();
        }
}


         4.内部类可以被私有

         **当内部类在成员变量上的位置的时候

         5.内部类可以直接访问外部类的成员


           访问格式:

                              外部类  .  this.


         6. 当内部类在成员位置上,可以被成员修饰符所修饰

         例如:private

                            static

                       当内部类被static修饰后,只能直接访问外部类中的static成员;


例如——————

class  Demo
    {
          private  int x = 3;

          static class Inner

            {
                   void function()
                     {
                       System.out.println(""+x);
                      }
              }
    }


      这种写法是错误的,因为变量X不是静态成员;

        ****  当设计成静态内部类时,

             外部类中访问static类中的非静态方法时: new Demo.Inner().function();

             在外部类中直接访问static内部类中的static 方法时:

                                                                                Demo.Inner.function();

        7.内部类中定义静态方法,那么该内部类必须也是静态的

例如:

class  Demo

    {

          private  int x = 3;

          static class Inner

            {

                   static void function()

                     {

                       System.out.println("");

                      }

              }

             class Inners

            {

                   static void show()

                     {

                       System.out.println("");

                      }

              }


        public static void method()

          {

                   Inner .function();

                    new Inner.show();//不允许

           }

    }



二   什么时候定义内部类?


       当描述事物的时候,事物的内部还有事物,该事物就用内部类来描述


三  局部内部类

class  Demo

    {

          private  int x = 3;

          void method()
           {
                   class Inner
                           {
                                  void function()
                                          {

                                         System.out.println("");
                                            }
                               }

                    new Inner().function();
                } 

    }



***局部的内部类不可以定义static 方法


四  内部类定义在局部时小节

     1.不可以被成员修饰符修饰

         2.可以直接访问外部类中的成员,因为还是持有外部类中的引用,但是不可以访问它所在的局部变量中的变量,只能访问被final修饰的局部变量。







你可能感兴趣的:(java基础篇——内部类)