public boolean equals(Object obj) {
if (this == obj) { return true; }
if (obj == null) { return false; }
if (this.getClass != obj.getClass) { return false; }
//再向下转型
...
//使用 == 判断基本类型字段(属性),使用 Objects.equals() 比较对象字段(引用类型)
return ...
}
hashCode() 方法
Object类的默认hashCode方法是从对象的存储地址得出散列码
如果重新定义了equals方法,应重新定义hashCode方法 Objects.hash()
toString 方法
System.out.println(x) 会调用x.toString()
数组继承了object的toString方法
调用静态方法打印数组 Arrays.toString(new int[] {1,2,3})
要打印多维数组,需要调用 Arrays.deepToString 方法
抽象类
abstract 关键字
abstract 修饰方法,表示这是抽象方法,没有方法体,需要子类实现
访问修饰符 abstract 返回类型 方法名(参数列表); //没有方法体
一旦类包含了abstract方法,该类必须声明为abstract类
抽象类不一定要包含abstract方法
一个类继承了抽象类,则必须实现抽象类的所有抽象方法,除非该类也声明为abstract类
抽象类不能用private、final、static来修饰(与重写相违背)
模板设计模式
abstract public class Template { //抽象类-模板设计模式
public abstract void job();//抽象方法
public void calculateTime() {//实现方法,调用 job 方法
//得到开始的时间
long start = System.currentTimeMillis();
job(); //动态绑定机制
//得的结束的时间
long end = System.currentTimeMillis();
System.out.println("任务执行时间 " + (end - start));
}
}
public class AA extends Template {
//计算任务
//1+....+ 800000
@Override
public void job() { //实现 Template 的抽象方法 job
long num = 0;
for (long i = 1; i <= 800000; i++) {
num += i;
}
}