选用教材:《Java核心技术卷一》
第五章 继承
一、两种绑定方式
1、静态绑定:对于private方法、static方法和final方法使用得比较多。
2、静态绑定:对于public方法使用得比较多。
个人理解是:那些可见性更大的方法也就存在着被更多次访问的可能,访问这些方法的对象也许来自不同的类,所以选用动态绑定就能更好地避免异常的产生。
二、抽象类和final类
抽象类关键字:abstract;final类关键字:final。
1、不同点1:包含有抽象方法的类,必须声明为抽象类;包含有final方法的类,不必被声明为final类。
2、不同点2:抽象类包含的方法不一定是抽象方法;final类包含的方法一定是final方法。
3、不同点3:抽象类不能被实例化,但可以扩展;final类可以被实例化,但不能扩展。
4、不同点4:抽象类对象只能引用非抽象子类的对象;final类对象可以引用任何可见的对象。
三、继承关系中的强制类型转换
1、超类变量←(赋值)子类对象引用
2、子类变量←(赋值)超类对象引用
第一种操作无需进行强制类型转换,第二种操作则需要进行强制类型转换。
超类和子类对象的引用赋值,可以参考基本数据类型的相关操作:
继承层次更高的子类相当于byte类型,继承层次更低的父类相当于int类型。
子类(byte)可以无损地转换到父类(int);父类(int)需要强制类型转换到子类(byte)。
四、超类的equals方法
用于检测一个对象是否等于另一个对象。
1、基本数据类型:用==判断。
2、对象引用类型:用equals方法判断,参与比较的对象所有的状态都相同,才能说这些对象是相等的。
3、如何编写一个完美的equals方法:
①显式参数命名为otherObject;
②检测this与otherObject是否相等:if(this==otherObject) return true;
③检测otherObject是否为null:if(otherObject==null) return false;
④比较this与otherObject的类:
所有子类都具有相同的相等性语义:
if(!(otherObject instance of ClassName)) return false;
所有子类具有不同的相等性语义:
if(getClass()!=otherObject.getClass()) return false;
⑤将otherObject强制转换为相应类类型的变量:
ClassName other=(ClassName) otherObject;
⑥根据相等性概念的要求来比较字段:
若所有字段都匹配,就返回true;否则,返回false。
return field1==other.field1
&& objects.equals(field2,other.field2) //没有分号
&&.........; //最后才有分号
五、数组与数组列表的区别
1、访问元素
数组:a[i]=1;
数组列表:a.set(i,harry); //将下标为i的数组列表元素设置为Harry
2、获取元素
数组:Employee e=a[i];
数组列表:Employee e=a.get(i); //得到下标为i的数组列表元素值
3、数组的大小与容量的区别
数组的大小X是指:某个特定的数组/数组列表共有X个位置可以使用。未放置元素的位置,会用0、false或者null填满;
数组的容量Y是指:该数组/数组列表可以放Y个元素,但是没放满的地方也就这么空着,系统不会自动填满;当然,当放在数组列表里的元素超过了Y这个数时,数组列表还会自动再开辟一块新的地方出来存放元素。
原文:https://www.cnblogs.com/yizhinailu/p/12584419.html