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 内部类();

        }

}

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

你可能感兴趣的:(JAVA-内部类详解)