• java学习——内部类(二)


    使用内部类

    内部类一共有三种使用方法:

    1.在外部类中使用内部类

          在外部类中使用内部类,与平常使用内部类没有区别,可以直接通过内部类的类名来定义变量,通过new调用内部类的构造方法来创建实例。

          唯一的区别是,不要再外部类的静态成员中使用非静态内部类,因为静态成员是不能访问非静态成员的。

    2.在外部类以外使用非静态内部类

      如果希望再外部类以外使用内部类(包括静态内部类和非静态内部类),则内部类不能使用private来修饰,private修饰的内部类只能再外部类内部使用。对于其他修饰符的内部类,则只能控制符对应的访问限权中使用

           *省略修饰符的内部类,只能被与外部类同一包中的类使用。

      *使用protected的内部类,只能被与外部类处于同一包中的类和外部类的子类访问。

      *使用public修饰的内部类,可以在任何地方使用。

      语法(包括静态和非静态)

       OutClass.InnerClass varName

      在外部类以外使用内部类是,完整的类名应该是OutClass.InnerClass。如果外部类前面还有包的话,则应该增加包名。

    package cn.it.demo01;
    
    class Out {
        // 定义一个内部类,不使用访问修饰符
        class In {
            public In(String msg) {
                System.out.println(msg);
            }
        }
    }
    
    public class CreateInnerInstance {
        public static void main(String[] args) {
            Out.In in = new Out().new In("测试信息");
    
            /*
             * 以上代码可改为如下三行代码 Out out=new Out(); Out.In in; in=out.new In("测试信息");
             */
        }
    }

    注意:如果需要在外部类以外的地方使用非静态内部类,非静态内部类的构造器必须使用外部类 的实例对象来调用。

    3.在外部类以外使用静态内部类

      因为静态内部类是外部类相关的,因此创建静态内部类对象时无需创建外部类对象,在外部类以外的地方使用创建静态内部类实例的语法如下:

      new OuterClass.InnerConstrutor()

    package cn.it.demo01;
    
    class StaticOut {
        // 定义一个静态内部类
        // 既同一个包中的类才能访问此静态内部类
        static class StaticIn {
            public StaticIn() {
                System.out.println("静态内部类的构造器");
            }
        }
    }
    
    public class CreateStaticInnerstance {
        public static void main(String[] args) {
            StaticOut.StaticIn in = new StaticOut.StaticIn();
        }
    
    }

      从上面的两个例子可以看出,在外部类以外的地方使用静态内部类和非静态内部类的语法差不多,不过,静态内部类只需使用外部类的类名即可,而非静态内部类必须时用外部类的实例对象来调用构造器。

  • 相关阅读:
    安装和强行卸载fuse
    Elasticsearch snapshot 备份的使用方法 【备忘】
    MYSQL数据仓库infobright【备忘】
    Tomcat8 启动慢 Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [53,161] milliseconds
    python爬虫实例
    JDK1.8 JVM参数配置
    QQ登录用到的URL
    CAS5.3.X 配置备忘
    Nexus3忘记admin密码时的解决办法
    CentOS7利用systemctl添加自定义系统服务
  • 原文地址:https://www.cnblogs.com/zhilili/p/10859590.html
Copyright © 2020-2023  润新知