第七章 复用类

toString():

当编译器需要一个String对象,而你只有一个对象时调用

复用代码:组合、继承

类中初始化引用的地方:

  1. 定义对象的地方
  2. 在类的构造器中
  3. 就在正要使用这些对象之前(惰性初始化)
  4. 使用实例初始化

所有的数据成员指定为private,所有的方法指定为public

每个类中都设置一个main()方法的技术可使类的单元测试变得简单易行

初始化基类:

先初始化基类

后该类自己的数据成员

使用super显示的编写调用积累构造器(super()必须在构造器第一行

代理:

继承和组合之间的中庸之道,可以拥有更多的控制力

将继承转换为:

含有原基类的成员

利用同名函数间接实现继承方法

确保正确清理:

将清理工作置于finally子句之中

执行类的清理动作,其顺序同生成顺序相反

名称屏蔽:

  • 如果Java的基类拥有某个已经被多次重载的方法名称,那么在导出类中重新定义该方法名称并不会屏蔽其在积累中的任何版本
  • @Override注解可以在继承中防止你不想重载时而意外地进行了重载

组合和继承之间的选择

组合(has-a):想要在新类中使用现有类的功能而非它的接口,新类的用户看到的只是为新类所定义的接口

继承(is-a):使用某一个现有类,并开发一个它的特殊版本

如果必须向上转型,则继承是必要的。

Protected

对“类用户”,这是private,但对于任何继承此类的导出类或其他任何位于同一包内的类,可以访问。

向上转型:

  • 新类是现有类的一种类型
  • 导出类是基类的一个超集
  • 导出类覆盖基类中方法时,即使向上转型,调用的任是导出类中新定义版本
  • 向上转型只能调用基类中有的方法,不能调用导出类中新定义的方法

final关键字

“这是无法更改的”,原因基于设计效率

final数据:

  1. 一个永远不改变的常量
  2. 一个在运行时被初始化的值,而你不希望它被改变

常量必须为基本数据类型,以final关键字表示,定义时必须对其进行赋值

既是static又是final的域将用大写表示,并使用下划线分割各单词

空白final

声明为final但又为给定初值的域

重要 必须在域的定义处或者每个构造器中用表达式对final进行赋值

final参数:

无法更改参数引用所指向的对象

final方法:

  1. 把方法锁定,以防止继承类修改它的含义
  2. 效率

只有要明确禁止覆盖时,才将方法设置为final

finalprivate关键字:

类中所有的private方法都隐式的指定为是final

final类:

禁止继承该类,final类中的方法都隐式的指定为是final

继承与初始化:

每个类的编译代码都存在于它自己的独立文件中,该文件只在需要使用程序代码时才被加载

  1. 对象中的所有基本数据类型都会被设置为默认值,对象引用被设置为null
  2. 基类的构造器会被调用
  3. 实例变量按次序被初始化
  4. 构造器的其余部分被执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值