The five-member Java-- class: inner classes

3.6 The five-member class: inner classes

3.6.1 static inner classes

① static inner class can be seen as equivalent to a static variable.

② important role in the internal class: private class can access external data.

③ static inner classes have direct access to static data outside class members can not access directly.

④ static inner classes do not hold a reference to an external class, you can not create an external class when you create static inner classes can access external static variables directly, if access to member variables of the outer class instance of the class must access external

public class OuterClass{

      

       // static variables

       private static String s1 = "A";

      

       //Member variables

       private String s2 = "B";

      

       // static methods

       private static void m1(){

              System.out.println("static's m1 method execute!");

       }

       // member method

       private void m2(){

              System.out.println("m2 method execute!");

       }

       // static inner classes

       // can be modified with the modifier access control permissions.

       // public, protected, private, default

       static class InnerClass{

              // static methods

              public static void m3(){

                     System.out.println(s1);

                     m1 ();

                    

                     //System.out.println(s2);

                     //m2();

              }

              //成员方法

              public void m4(){

                     System.out.println(s1);

                     m1();

                    

                     //System.out.println(s2);

                     //m2();

              }

       }

       //入口

       public static void main(String[] args){

             

              //执行m3

              OuterClass.InnerClass.m3();

             

              //执行m4

              InnerClass inner = new OuterClass.InnerClass();

              inner.m4();

       }

}

3.6.2 成员内部类

①成员内部类可以等同看做成员变量

②成员内部类中不能有静态声明

③成员内部类可以访问外部类所有的数据

public class OuterClass{

       //静态变量

       private static String s1 = "A";

       //成员变量

       private String s2 = "B";

       //静态方法

       private static void m1(){

              System.out.println("static's m1 method execute!");

       }

       //成员方法

       private void m2(){

              System.out.println("m2 method execute!");

       }

       //成员内部类

       //可以用访问控制权限的修饰符修饰。

       //public,protected,private,缺省

       class InnerClass{

              //静态方法

              //public static void m3(){}

              //成员方法

              public void m4(){

                     System.out.println(s1);

                     m1();

                    

                     System.out.println(s2);

                     m2();

              }

       }

       //入口

       public static void main(String[] args){

              //创建外部类对象

              OuterClass oc = new OuterClass();

              InnerClass inner = oc.new InnerClass();

              inner.m4();

       }

}

3.6.3 局部内部类

①局部内部类等同于局部变量

②重点:局部内部类在访问局部变量的时候,局部变量必须使用final修饰

③局部内部类是在方法中定义的,它只能在当前方法中使用。和局部变量的作用一样

局部内部类和成员内部类一致,不能包含静态成员

public class OuterClass{

       //方法

       public void m1(){

       //局部变量

       final int i = 10;//

             

              //局部内部类

              //局部内部类不能用访问控制权限修饰符修饰。

              class InnerClass{

                     //内部类不能有静态声明

                     //public static void m1(){}

                     //成员方法

                     public void m2(){

                            System.out.println(i); // 10

                     }

              }

              //调用m2

              InnerClass inner = new InnerClass();

              inner.m2();

       }

       //入口

       public static void main(String[] args){

              OuterClass oc = new OuterClass();

              oc.m1();

       }

}

3.6.4 匿名内部类

是一种特殊的内部类,该类没有名字

public class Test{

       //静态方法

       public static void t(CustomerService cs){

              cs.logout();

       }

       //入口

       public static void main(String[] args){

              //调用t方法

              //t(new CustomerServiceImpl());

              //使用匿名内部类的方式执行t方法

              //整个这个"new CustomerService(){}"就是个匿名内部类

              t(new CustomerService(){

                     public void logout(){

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

                     }

              });

              //匿名内部类的优点:少定义一个类.

              //缺点:无法重复使用!

       }

}

//接口

interface CustomerService{

       //退出系统

       void logout();

}

//编写一个类实现CustomerService接口

/*

class CustomerServiceImpl implements CustomerService{

       public void logout(){

              System.out.println("系统已经安全退出!");

       }

}

*/

Guess you like

Origin www.cnblogs.com/superjishere/p/11829649.html