Java——类的成员之五:内部类

3.6 类的成员之五:内部类

3.6.1 静态内部类

①静态内部类可以等同看做静态变量。

②内部类重要的作用:可以访问外部类中私有的数据。

③静态内部类可以直接访问外部类的静态数据,无法直接访问成员。

④静态内部类不会持有外部的类的引用,创建时可以不用创建外部类,静态内部类可以直接访问外部的静态变量,如果访问外部类的成员变量必须通过外部类的实例访问

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,缺省

       static class InnerClass{

              //静态方法

              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("系统已经安全退出!");

       }

}

*/

posted @ 2019-11-10 13:35  阿江是个程序猿  阅读(187)  评论(0编辑  收藏  举报