类、超类和子类
定义子类(使用关键字extends表示继承)
覆盖方法
子类构造器
一个对象变量可以指向多种实际类型的现象称为多态,在运行时能够自动地选择适当的方法,称为动态绑定
继承层次
多态
理解方法调用(非private方法、static方法、final方法时,采用动态绑定,考虑重载解析。生成变量类型和引用类型的方法表。运行时:1、获取实际类型的方法表。2、查找定义了签名所在的类。3、调用)
覆盖一个方法时,子类方法的可见性不能低于超类方法
阻止继承:final类和方法
强制类型转换和instanceof运算符(尽量少用)
1、只能在继承层次内进行强制类型转换。2、在将超类强制转换成子类之前,应该使用instanceof进行检查
抽象类(abstract关键字):有一个或多个抽象方法的类,必须标注为抽象类。可以有字段和具体方法。
扩展抽象类,1、如果仍有未定义的抽象类的抽象方法,则子类也必须标记为抽象类。2、全部方法都定义,这样子类就不用标记为抽象了。
不含抽象方法,也可以声明抽象类。抽象类不能实例化
受保护访问(protected)
Object:所有类的超类
Object类型的变量
equals方法
相等测试与继承
toString方法
泛型数组列表(ArrayList)
new:声明数组列表
add:添加元素
ensureCapacity:分配额定大小的内部数组
new对象时,括号里也可以传初始化容量
分配数组列表和分配新数组的区别:前者只是可能有这么多个,具体的看实际添加的。后者是定
size:实际元素个数
trimToSize:调整存储块大小(一旦调整,再添加,则需要花时间移动存储块)
访问数组列表元素(get,set)
remove()
插入和删除的操作效率很低,对于较小数组列表可以忽略。如果元素较多,插入和删除操作又比较频繁,就应该考虑使用链表。
for each
类型化与原始数组列表的兼容性
对象包装器与自动装箱(装箱和拆箱是编译器要做的工作,而不是虚拟机)
参数数量