zoukankan      html  css  js  c++  java
  • 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("系统已经安全退出!");

           }

    }

    */

  • 相关阅读:
    部署Packbeat--Elastic Stack之十
    部署Winlogbeat--Elastic Stack之九
    解决git clone pull push慢必杀技
    Android内存泄露分析及内存管理小记
    android 8.0以后(sdk26)启动前台服务的问题探究
    打包编译.so流程
    AS升级编译报错:The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin.
    三层fragment嵌套,接口回调方式
    recyclerview的onBindViewHolder中if之后要写else,否则可能显示有问题
    2018
  • 原文地址:https://www.cnblogs.com/superjishere/p/11829649.html
Copyright © 2011-2022 走看看