Java核心技术——第三章:继承

覆盖方法

父类中的一些方法对于子类并不是适用,需要提供一个新的方法用来覆盖(override)父类中的方法.如果需要调用父类的方法,在方法名前加super.

子类构造器

由于子类的构造器不能直接访问父类的私有域,所以必须利用父类的构造器对这部分私有域初始化,使用super实现对父类构造器的调用,使用super调用父类构造器的语句必须是子类构造器的第一条语句.

  • 如果子类构造器没有显式调用父类构造器,则自动调用父类的默认(无参)构造器,如果父类没有无参构造器.,并且在子类构造器中又没有显式调用父类构造器,则java会报错

抽象类

包含一个或多个抽象方法的类本身必须被声明为抽象的,除了抽象方法外,抽象类还可以包含具体数据和具体方法.
抽象方法充当着占位的角色,它们的具体实现在子类中,扩展抽象类有两个方法:
1.抽象类中定义部分抽象方法或不定义抽象类方法,这样就必须将子类也标记为抽象类.
2.定义全部的抽象方法,这样一来,子类就不是抽象的了.
抽象类不能被实例化

受保护访问(protected)

最好在类中的域标记为private,方法标记为public, 任何声明为private的内容对其他类都不可见,
有些时候需要父类中的某些方法或域允许被子类访问,需要将方法或域声明为protected.这样子类就可以访问父类中的方法或域.

Object类

equals方法

object类中的equals方法用来检测一个 对象是否等于另外一个对象,在object类中,这个方法将被判断两个对象是否具有相同的引用, 如果两个对象具有相同的引用,那么他们一定是相等的,

hashCode方法

散列码是由对象导出的一个整列值, 散列码没有规律, 如果x和y是两个不同的对象,x.hashCode()和y.hashCode()基本不会相同,.
由于hashCode方法定义在object类中, 因此每一个对象都有一个默认的散列码,其值为对象的储存地址.
String和StringBuilder的散列码

对象散列码
s2556
sb20526976
t2556
tb20527144

字符串s和t有相同的散列码. 是因为字符串的散列码是由内容导出的, 而字符串sb和tb散列码不同, 是因为在StringBuffer类中没有定义hashCode方法, 它的散列码是object默认hashCode方法导出的存储地址.

  • 如果重新定义equals方法, 就必须重新定义hashCode方法, 以便用户可以将对象插入到散列表中.
  • 如果x.equals(y)返回true, 那么x.hashCode()就必须与y.hashCode()有相同的值, 如果定义Employee.equals比较雇员id, 那么hashCode方法就需要散列id,而不是雇员的姓名或存储地址.

toString方法

用于返回表示对象值的字符串.
object类定义了toString方法, 用来打印输出对象所属的类名和散列码.
在标准类库中, 许多类都定义了toString方法, 建议为自定的每一个类添加toString方法, 不仅自受益, 所有使用这个类的程序员也从中受益.

对象包装器和自动装箱

有时需要将int这样的基本类型转换为对象, 所有基本类型都有一个与之对应的类.
Integer→int,这些类称为包装器(wrapper), 对象包装器类是不可变的, 一旦构造了包装器, 就不允许更改包装器在其中的值, 同时, 对象包装器还是final. 因此不能定义它们的子类.
装箱:int→Integer
拆箱:Integer→int
详细见https://www.cnblogs.com/dolphin0520/p/3780005.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值