接口与内部类

接口

  • 如果类遵从某个特定接口,就履行这项服务
    e.g. 实现Comparable接口的Array可以使用sort方法
  • 接口中的方法自动属于public
  • 接口中可以定义常量,但不能含有实例域、也不能在接口中实现方法
  • 可以声明接口的变量,引用实现了接口的类对象
  • 接口可以提供多重继承的好处,避免多重继承的复杂与低效

对象克隆

  • 拷贝: 原始变量与拷贝变量引用同一个对象
  • 克隆:默认浅拷贝,并没有克隆对象中的内部对象。要实现深拷贝,需要重新定义clone方法
  • 即使clone的默认实现(浅拷贝)能满足需求,也应该实现Cloneable接口
  • 必须谨慎实现子类的克隆

*接口与回调

  • 回调:可以指出某个特定事件发生时应该采取的动作

内部类

使用原因:

  • 可以访问该类定义所在的作用域中的数据,包括私有数据
  • 对同一个包的其他类隐藏
  • 使用匿名内部类方便编写回调函数

使用内部类访问对象状态

  • 并不是每个外部类对象都有一个内部类实例域
  • 内部类既可以访问自身的数据域,也可以访问创建他的外部类对象的实例域,即存在一个隐式引用
  • 外围类的引用在构造器中设置,编译器修改了所有内部类的构造器,添加一个外围类引用的参数
  • 只有内部类可以是私有类,常规类只可以具有包可见性或者公有可见性

局部内部类

  • 在方法中定义局部类
  • 对外部世界完全隐藏,除了所在的方法,没有其他方法知道其存在
  • 可以访问声明为final的局部变量(参数),减少了需要显示编写的实例域
  • final保证局部变量与在局部类内部建立的拷贝保持一致
  • final但需要更新:可以使用长度为1的数组替代

匿名内部类

  • 双括号初始化:
invite( new ArrayList<String>() {{ add("Harry"), add("Tony") }} );
// 外层括号建立一个匿名类,内层括号为对象构造块

静态内部类

  • 静态内部类的对象除了没有生成对其外部类对象的引用外,与其他内部类相同

*代理

  • 代理类是在程序运行过程中创建的
  • 代理类只有一个实例域——调用处理器
  • 代理类一定是public和final
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值