class CPU {
int speed;
public int getSpeed(){
return speed;
}
public void setSpeed(int speed){
this.speed = speed;
}
@Override
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj == null){
return false;
}
if(getClass() != obj.getClass()){
return false;
}
CPU other = (CPU) obj;
return this.speed == other.speed;
}
/* Java规范明确要求:
如果两个对象通过equals比较为相等(a.equals(b) == true),那么它们的hashCode必须相同。
如果两个对象hashCode不同,它们通过equals比较一定不相等(但hashCode相同不代表equals一定为true)。
如果只重写equals而不重写hashCode,会破坏这个契约,导致对象在哈希表等数据结构中行为异常。 */
@Override
public int hashCode(){
return speed; /* 因为equals方法仅比较了speed属性,所以hashCode也只需要基于speed计算。
如果两个CPU对象的speed相等,它们的hashCode必须相同;如果speed不同,
hashCode尽量不同(但不是强制要求)*/
}
@Override
public String toString(){
return String.valueOf(speed);
}
}
class HardDisk{
int amount;
public int getAmount(){
return amount;
}
public void setAmount(int amount){
this.amount = amount;
}
}
class PC{
CPU cpu;
HardDisk HD;
void setCPU(CPU c){
cpu = c;
}
void setHardDisk(HardDisk h){
HD = h;
}
void show(){
System.out.println("CPU speed:"+cpu.getSpeed());
System.out.println("HardDisk amount:"+HD.getAmount());
}
}
public class Test{
public static void main(String args[]){
CPU c = new CPU();
HardDisk disk = new HardDisk();
c.setSpeed(2200);
disk.setAmount(200);
PC pc = new PC();
pc.setCPU(c);
pc.setHardDisk(disk);
pc.show();
}
}