java笔记--day10--内部类

  • 1 内部类概述
    • 把类定义在其他类的内部,这个类就被称为内部类。
      • 举例:在类A中定义了一个类B,类B就是内部类。
    • 内部类的访问特点:
      • 内部类可以直接访问外部类的成员,包括 私有。
      • 外部类要访问内部类的成员,必须创建对象
    • 为什么需要内部类?
      • 每个内部类都能独立地继承自一个类(或实现一个接口),所以无论外部类是否已经继承了某个类(或实现了某个接口),对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类有效地实现了“多重继承”。
  • 2 内部类位置
    • 成员位置(成员内部类)
      • 外部如何创建对象:
        外部类名.内部类名 对象名 = 外部类对象.内部类对象;
        例如:Outer.Inner oi = new Outer().new Inner();
    • 局部位置(局部内部类)
  • 3 成员内部类
    • 用法
      一般内部类就是不让外界直接访问的
    • 成员内部类的常见修饰符
    • private 为了保证数据的安全性
    • public static 为了让数据访问更方便(此处 类 可以用static修饰的原因是内部类也是外部类的一个成员)
      • 被static修饰的成员内部类只能访问外部类的静态成员
      • 内部类被静态修饰后,其类中的方法可以为:
        1. 静态方法
        2. 非静态方法
  • 4 局部内部类
    • 可以直接访问外部类的成员
    • 在同样的局部位置,可以创建内部类对象,通过对象调用内部类的方法,来使用局部内部类的功能
    • 局部内部类访问 本地局部变量的注意事项:
      • 必须被final修饰
        原因:
        在如下代码中:
        int n = 100;n在栈内存中
        class Inner{…}在堆内存中
        一旦public void method() 运行完毕,栈内存中的n消失,堆内存中的class Inner{…}还没有消失,
        所以System.out.println(n);这句话就有问题,就会报错
class Outer {
    public void method() {
        final int n = 100;
        class Inner {
            public void show() {
                System.out.println(n);
            }
        }

        Inner i = new Inner();
        i.show();
    }
}
  • 5 匿名内部类
    • 就是没有名字的内部类
    • 因为没有名字,所以只能使用一次
    • 但是匿名内部类还有一个条件:必须继承一个父类或实现一个接口
    • 格式:
      new 类名或者接口名() {
      重写方法;
      };
    • 本质
      • 是一个继承了类或者实现了接口的子类匿名对象(和普通对象一样是一个对象,本质是一个地址值)
      • 满足的需求:在一个类的内部,要实现一次某个接口的功能 或者 继承某个类的功能(也是只是使用一次该功能)。快速释放内存
      • 总而言之,匿名内部类是一个对象,是该类的子类对象、或该抽象类的具体类对象、或者该接口的实现类对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值