内部类

    xiaoxiao2023-11-01  140

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

    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的变量。如下:

    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)