读《Java核心技术 卷I》第五章

第五章 继承

类、超类、子类

关键字extends表示继承

子类比父类拥有的功能更多

在设计类时,应该将一般方法放在父类中,而将更特殊的方法放在子类中

使用super关键字调用父类的方法

子类构造器

使用super调用构造器的语句必须是子类构造器的第一条语句

如果子类的构造器没有显示的调用超类的构造器,将自动地调用超类的无参数构造器。如果超类没有无参数的构造器,并且在子类的构造器中有没有显示的调用超类的其他构造器,Java编译器就会报告一个错误。

一个对象变量可以指示多种实际类型的现象称为多态。

在运行时能够自动地选择适当的方法,称为动态绑定。

可以将子类赋给父类,但是不能将父类的引用赋给子类变量

不允许扩展的类被称为final类

String类就是final类

强制类型转换

进行强制类型转换的原因是:要在暂时忽略对象的实际类型之后使用对象的全部功能。

编译器会自动检查类型是否符合,若不符,并产生一个ClassCastException异常

因此,应该培养一个良好的程序设计习惯:在进行强制类型转换之前,先查看是否能成功地转换。使用instanceof关键字来实现。

抽象类

abstract关键字

为了提高程序的清晰度,包含一个或多个抽象方法的类本身必须声明为抽象的。

除了抽象方法之外,抽象类还可以包含字段和具体方法。

4个访问权限

  1. 仅对本类可见——private

  2. 对外部完全可见——public

  3. 对本包和所有子类可见——protected

  4. 对本包可见——默认

Object所有类的超类

Object类中的equals方法用于检测一个对象是否等于另一个对象

getClass方法将返回一个对象所属的类

建议为每一个自定义类都添加toString方法

自动装箱和自动IN

Integer int

Long long

Short short

Byte byte

Float float

Double double

Boolean boolean

Character char

 

如果在一个条件表达式中混合使用Integer和Double类型,Integer值就会拆箱,提升为double,在装箱为Double

例:Integer x=1;Double y=2.0;System.out.print(true ? x : y ) ; //输出 1.0

枚举类

枚举类不能创建新的对象,枚举类的构造器是私有的。

因此,在比较两个枚举类型的值时,并不需要调用equals,直接使用“==”就可以了。

每一个枚举类型都有一个静态的values方法,它将返回一个包含全部枚举值的数组。

反射

能够分析类能力的程序成为反射

反射机制可以用来:

  • 在运行时分析类的能力

  • 在运行时检查对象,例如,编写一个适用于所有类的toString 方法

  • 实现泛型数组操作代码

  • 利用Method对象,这个对象很想C++中的函数指针

 

继承的设计技巧

  1. 将公共操作和字段放在超类中

  2. 不要使用受保护的字段

  3. 使用继承实现“is-a”关系

  4. 除非所有继承的方法都有意义,否则不要使用继承

  5. 在覆盖方法时,不要改变预期的行为

  6. 使用多态,而不要使用类型信息

  7. 不要滥用反射

posted @ 2021-11-03 20:41  浪涂  阅读(57)  评论(0)    收藏  举报