jdk8源码 - 1 - 2 - 内部类

什么是内部类

在一个类的内部定义的类被称为内部类。

内部类的使用场景

内部类和外部类有一定的关系,如果一个类只被某个类使用的时候,可以将该类定义为使用者的内部类,无需为该类单独创建一个类文件。

内部类的分类

内部类可以分为成员内部类,静态内部类,局部内部类和匿名内部类。

内部类demo

public class OuterClass {
   

    /**
     * 常量
     */
    private static final String TYPE = "outer";
    /**
     * 静态属性
     */
    private static int count;
    /**
     * 成员属性
     */
    private String name;

    //不能将成员内部类定义为外部类的静态属性
//    private static MemberInnerClass memberInnerClass = new MemberInnerClass();

    private MemberInnerClass memberInnerClass = new MemberInnerClass();

    private static StaticInnerClass staticInnerClass = new StaticInnerClass();

    private StaticInnerClass staticInnerClass2 = new StaticInnerClass();


    /**
     * 匿名内部类
     */
    private static InnerInterface staticAnonymousInner = new InnerInterface() {
   

        @Override
        public void compare() {
   
            //静态属性的匿名内部类不能直接访问外部类的成员属性
//            System.out.println(name);
        }

        private static final String ANONYMOUS_INNER_TYPE = "anonymousType";
        //匿名内部类不能定义静态变量
        //private static int anonymousCount;
        private String anonymousName;

        //匿名内部类不能定义静态方法
//        public static void anonymousInnerStaticMethod() {
   
//            System.out.println("anonymous inner class static method");
//        }

        public void anonymousInnerMemberMethod() {
   
            System.out.println("anonymous inner class member method");
            System.out.println(TYPE);
            System.out.println(count);
            //静态属性的匿名内部类不能直接访问外部类的成员属性
//            System.out.println(name);

            staticMethod();
            //静态属性的匿名内部类不能直接访问外部类的成员方法
//            memberMethod();
        }

    };

    /**
     * 匿名内部类
     */
    private InnerInterface memberAnonymousInner = new InnerInterface() {
   

        @Override
        public void compare() {
   
            //非静态属性的匿名内部类可以直接访问外部类的成员属性
            System.out.println(name);
        }

        private static final String ANONYMOUS_INNER_TYPE = "anonymousType";
        //匿名内部类不能定义静态变量
        //private static int anonymousCount;
        private String anonymousName;

        //匿名内部类不能定义静态方法
//        public static void anonymousInnerStaticMethod() {
   
//            System.out.println("anonymous inner class static method");
//        }

        public void anonymousInnerMemberMethod() {
   
            System.out.println("anonymous inner class member method"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值