Java内部类学习小结

一. 分类

  1. 静态内部类(类内部类)
  2. 成员内部类(实例内部类)
  3. 方法内部类
  4. 匿名内部类

二. 静态内部类

  1. 不能引用外部类的实例变量和实例方法
  2. 实例创建方式
public class OutStaticInner {
    Inner inner = new Inner();

    static class Inner {
        OutStaticInner outStaticInner = new OutStaticInner();
    }
}

class NewInner {
    OutStaticInner.Inner inner = new OutStaticInner.Inner();
}

三. 成员内部类

  1. 不能引用外部类的类变量和类方法
  2. 不能有类成员变量和方法,可以有常量。
    如果外部类的类方法m中或者类变量i的初始赋值,引用了内部类的类成员,那么在调用m或者初始化i时会导致内部类的初始化,此时外部类的实例可能还没有创建。而成员内部类是与其外部类实例绑定的,这显然互相矛盾。
  3. 成员内部类是闭包
  4. 实例创建方式
public class OutInstanceInner {
    Inner inner = new Inner();

    class Inner {
        OutInstanceInner outInstanceInner = new OutInstanceInner();
    }
}

class NewInsInner {
    OutInstanceInner.Inner inner = new OutInstanceInner().new Inner();
}

四. 方法内部类

  1. 不能引用外部类的类变量和类方法
  2. 不能有static的成员变量和方法,可以有常量。
  3. 可用修饰符和方法变量一致(final)
  4. 不能引用外围方法的局部变量,除非是final的变量。
    • 外围方法的生命周期和方法内部类不一致。
    • 方法内部类会将外围方法的局部变量在自己内部拷贝一份,如果值发生改变,会导致内外不一致的现象。
  5. 实例的创建方式,方法外部无法创建方法内部类的实例。
public class OutMethodInner {
    void method() {
        class Inner {
            OutMethodInner outMethodInner = new OutMethodInner();
        }
        Inner inner = new Inner();
    }
}

五. 匿名内部类

  1. 根据匿名内部类所在位置决定其属性
  2. 分类
    • 继承式
    • 接口式
    • 参数式
public class AnonymousInner {
    static void run(Interface face) {
        face.method();
    }

    public static void main(String[] args) {
        //继承式
        new Inherit() {
            @Override
            void method() {
                System.out.println("inherit method.");
            }
        }.method();

        //接口式
        new Interface() {
            @Override
            public void method() {
                System.out.println("implement method.");
            }
        }.method();

        //参数式
        run(new Interface() {
            @Override
            public void method() {
                System.out.println("parameter method.");
            }
        });
    }
}

class Inherit {
    void method() {
        System.out.println("method.");
    }
}

interface Interface {
    void method();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值