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

           }

    }

    */

  • 相关阅读:
    2012的目标
    让顺丰快递给折腾了,昨晚发的快递,现在还没挪地方
    做的FM收音机终于交工,老婆验收完毕
    C语言宏定义使用技巧
    20棵树植树问题
    C简单实现动态2维数组
    运动量测试
    #pragma pack(n)的含义及其用法
    回调函数
    ubuntu 全局配置文件
  • 原文地址:https://www.cnblogs.com/superjishere/p/11829649.html
Copyright © 2020-2023  润新知