内部类

    内部类是定义在另一个类中的类,之所以定义内部类,主要原因有以下三点:

1. 访问自身数据域

    内部类可以访问自身的数据域,也可以访问创建它的外围类对象的数据域。之所以内部类能访问到创建它的类的域,很大程度上是依赖了内部类对象的“隐式引用”,它指向了创建它的外部类对象。如

public class OutClass {

    private String str = "OutClass 类变量";

    public class  InClass{

        public void incre(){
            System.out.println(str);
        }
    }

    public static void main(String[] args) {
        OutClass outClass = new OutClass();
        outClass.new InClass().incre();

    }
}

输出结果:
OutClass 类变量

    很明显,对于InClass类而言,是不存在str引用变量的,而从最终的打印结果来看,被打印出来的str引用变量来自于OutClass的域,这也就说明了InClass对象能够找到并访问OutClass的变量。如下:
image

2. 体现封装性

    内部类可以对同一个包中的其它类隐藏起来。内部类本身的访问都是要通过外部构建他的类来间接访问,在同包下的类更不可能直接访问内部类了。外部的类访问内部类有两种方式,第一种是如上所述的

    OutClass outClass = new OutClass();
    outClass.new InClass().incre();

第二种就是将内部类直接定义为静态内部类,如下所示:

public class OutClass {

    private static String str = "OutClass 类变量";

    public static class  InClass{

        public static void incre(){
            System.out.println(str);
        }
    }

    public static void main(String[] args) {
        OutClass.InClass.incre();

    }
}

一旦将内部类设置为静态类,则意味着对外部类而言,静态内部类也是属于外部类的静态域,所以内部类也只能访问外部的静态变量。

3. 代码简洁

    当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。很多时候我们只需要创建这个类的一个对象就能实现功能,匿名内部类就是在局部内部类的基础上再次简化了内部类的写法。如下所示:

public class OutClass {

    private static String str = "OutClass 类变量";

    public static void main(String[] args) {

        new OutClass(){
            public void print(){
                System.out.println(str);
            }
        }.print();
        
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值