Java之旅(十七)

Java 内部类

Java 内部类是一种特殊的类,它在一个类的内部定义,可以直接访问这个类的成员,包括私有成员。

内部类的包括:

  • 成员内部类
    • 成员内部类可以无限制访问外部类的所有成员属性。
    • 外部类想要访问内部类的成员,必须先创建一个成员内部类的对象
  • 局部内部类
    • 定义在一个方法或者一个作用域里面的类,所以局部内部类的生命周期仅限于作用域内。
    • 局部内部类就好像一个局部变量一样,它是不能被权限修饰符修饰的,比如说 public、protected、private 和 static 等。
    • 局部内部类需要继承外部方法类
  • 匿名内部类
    • 匿名内部类是我们平常用得最多的,尤其是启动多线程的时候,会经常用到,并且 IDE 也会帮我们自动生成。
    • 匿名内部类就好像一个方法的参数一样,用完就没了,以至于我们都不需要为它专门写一个构造方法,它的名字也是由系统自动命名的。
    • 匿名内部类是唯一一种没有构造方法的类。
    • 匿名内部类的作用主要是用来继承其他类或者实现接口,并不需要增加额外的方法,方便对继承的方法进行实现或者重写。
  • 静态内部类
    • 静态内部类和成员内部类类似,只是多了一个 static 关键字。
    • 由于 static 关键字的存在,静态内部类是不允许访问外部类中非 static 的变量和方法的

使用内部类的特性:

  • 内部类可以使用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
  • 在单个外部类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
  • 创建内部类对象的时并不依赖于外部类对象的创建。
  • 内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。
  • 内部类提供了更好的封装,除了该外围类,其他类都不能访问。

内部类的优点:

  1. 内部类可以方便地定义私有成员,可以用于实现简单的封装。
  2. 内部类可以实现延迟初始化,可以减少代码的重复编写。
  3. 内部类可以实现代码的复用,可以用于解决单继承的限制。

内部类的缺点:

  1. 内部类可能会产生额外的开销,因为每个内部类都需要在编译时创建一个对象。
  2. 内部类可能会造成代码的可读性问题,因为内部类会破坏类的封装性,可能会引起代码复杂度增加。

以下示例:

在类 Person 中定义内部类 Friend

public class Person {
    private String name;
    private int age;

    private Friend friend;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void setFriend(Friend friend) {
        this.friend = friend;
    }

    public Friend getFriend() {
        return friend;
    }

    public void printFriend() {
        System.out.println(friend.getName());
    }
}

class Friend {
    private String name;

    public Friend(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

在这个示例中,内部类 Friend 在 Person 类中定义,并实现了 getFriend() 方法,该方法返回 Person 类的成员变量 friend。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值