java.lang.Object
java.lang包在使用的時候無需顯示導入,編譯時由編譯器自動導入。
Object類是類層次結構的根,Java中所有的類從根本上都繼承自這個類。
Object類是Java中唯一沒有父類的類。
其他所有的類,包括標準容器類,比如數組,都繼承了Object類中的方法。
相等測試與自檢性
hashcode
toString
public class Employee {
private String name;
private double salary;
private Date hireDay;
public Employee(String n, double s, int year, int month, int day ){
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public Date getHireDay() {
return hireDay;
}
public void raiseSalary(double byPercent) {
double raise = salary * byPercent / 100;
salary += raise;
}
@Override
public boolean equals(Object otherObj) {
if(otherObj == null) return false;
if(this == otherObj) return true;
if(getClass()!=otherObj.getClass()) return false;
Employee other = (Employee) otherObj;
return Objects.equals(name, other.name)
&& salary == other.salary
&& Objects.equals(hireDay, other.hireDay);
}
@Override
public int hashCode() {
return Objects.hash(name, salary, hireDay);
}
@Override
public String toString() {
// TODO Auto-generated method stub
return getClass().getName() + "[name=" + name + ",salary=" + salary
+ ",hireDay=" + hireDay + "]";
}
}
public class Manager extends Employee{
private double bonus;
public Manager(String n, double s, int year, int month, int day) {
super(n, s, year, month, day);
}
public double getSalary() {
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
public void setBonus(double b) {
bonus = b;
}
@Override
public boolean equals(Object otherObj) {
if(!super.equals(otherObj))return false;
Manager other = (Manager) otherObj;
return bonus == other.bonus;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return super.hashCode() + 17 * new Double(bonus).hashCode();
}
@Override
public String toString() {
// TODO Auto-generated method stub
return super.toString() + "[bonus=" + bonus + "]";
}
}
public class Test {
public static void main(String[] args) {
int i = Objects.hashCode(new Date());//1405888641
int ii = Objects.hash(new Date());//1405888672
Employee e1 = new Employee("周杰倫", 75000, 1987, 12, 15);
Employee e2 = new Employee("周杰倫", 75000, 1987, 12, 15);
Employee e3 = new Employee("張學友", 50000, 1989, 10, 1);
System.out.println(e1.equals(e2)); //true
System.out.println(e2.equals(e1)); //true
System.out.println(e1.equals(e3)); //false
Manager m1 = new Manager("周杰倫", 75000, 1987, 12, 15);
Manager m2 = new Manager("李沁", 50000, 1999, 10, 1);
System.out.println(m1.equals(e1)); //false
System.out.println(m1.equals(m2)); //true
Employee ee1 = new Manager("周杰倫", 75000, 1987, 12, 15) ;
System.out.println(ee1.equals(e1)); //fasle
System.out.println(ee1.equals(m1)); //true
Manager m3 = (Manager) ee1;
System.out.println(m3.equals(e1)); //false
System.out.println(m3.equals(m1)); //true
m3.setBonus(2000);
System.out.println(m3.equals(m1)); //false
}
}