22 静态内部类

一般 外围类访问静态内部类的方法是:

静态内部类就像一个外围类的静态成员 ,可以实例化它 通过内部类的构造方法初始化内部类, 然后调用里面的方法

内部类访问外围类
  1. 静态内部类访问外围类:
    可以访问外围类的所有成员,包括私有的成员。
  2. 非静态内部类访问外围类:
    可以访问外围类的方法,也可以使用修饰过的(?)this方法 来获取外围实例的引用。
优点:
  1. 静态内部类的实例可以独立于外围类实例之外
    这样就不会消耗过多内存。而非静态内部类必须要有一个关联的外围类实例,也就是 每个内部非静态类实例都要有相关联的外围类实例

一般内部类只供外围类访问(不对)
Map 的 Entry 类就是可以供其他类使用。

  1. 外围类访问(非)静态内部类
    都可以通过实例化内部类,获取内部类的实例之后,通过实例访问内部类
    public void unStatic() {
        //外围类访问内部非静态类
        Inner22 inner22 = new Inner22();
        inner22.member();
    }

    public void get1Inner(){
        //外围类访问静态内部类
        privateInner = new PrivateInner();
        boolean afalse = privateInner.getFalse();
        System.out.println(afalse);
    }

  1. 静态内部类访问外围类的静态成员
    private static class PrivateInner {

        PrivateInner(){
            get1();
        }
        int get1(){
            //静态内部类访问外围类的   静态成员 one  但是不能访问非静态的成员
            System.out.println("get1");
            return one;
        }
        boolean getFalse(){
            return false;
        }
    }
  1. 非静态内部类访问外围类的变量成员和方法
    public class Inner22{
        public Inner22(){
//            this(); //不可以
            //2种方法访问   外围类
            //1 实例化外围类
            //2 使用OutterClassName.this.methodName();
            Item22 item22 = new Item22();
            System.out.println(item22.toString());
//第二种方法  获取外围类this引用
//            Item22.this.toString();
        }
        public void member(){
            System.out.println("inner22-unStatic---" + one);
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容