读《Java核心技术 卷I》第五章
类、超类、子类
关键字extends表示继承
子类比父类拥有的功能更多
在设计类时,应该将一般方法放在父类中,而将更特殊的方法放在子类中
使用super关键字调用父类的方法
使用super调用构造器的语句必须是子类构造器的第一条语句
如果子类的构造器没有显示的调用超类的构造器,将自动地调用超类的无参数构造器。如果超类没有无参数的构造器,并且在子类的构造器中有没有显示的调用超类的其他构造器,Java编译器就会报告一个错误。
一个对象变量可以指示多种实际类型的现象称为多态。
在运行时能够自动地选择适当的方法,称为动态绑定。
可以将子类赋给父类,但是不能将父类的引用赋给子类变量
不允许扩展的类被称为final类
String类就是final类
强制类型转换
进行强制类型转换的原因是:要在暂时忽略对象的实际类型之后使用对象的全部功能。
编译器会自动检查类型是否符合,若不符,并产生一个ClassCastException异常
因此,应该培养一个良好的程序设计习惯:在进行强制类型转换之前,先查看是否能成功地转换。使用instanceof关键字来实现。
抽象类
abstract关键字
为了提高程序的清晰度,包含一个或多个抽象方法的类本身必须声明为抽象的。
除了抽象方法之外,抽象类还可以包含字段和具体方法。
4个访问权限
-
仅对本类可见——private
-
对外部完全可见——public
-
对本包和所有子类可见——protected
-
对本包可见——默认
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++中的函数指针
继承的设计技巧
-
将公共操作和字段放在超类中
-
不要使用受保护的字段
-
使用继承实现“is-a”关系
-
除非所有继承的方法都有意义,否则不要使用继承
-
在覆盖方法时,不要改变预期的行为
-
使用多态,而不要使用类型信息
-

浙公网安备 33010602011771号