我的java学习笔记(9)关于Object:所有类的超类

1.Object类是java所有类的始祖,,java中的每一个类都是由它扩展而来的。

2.如果没有明确的指出超类,Object就被认为是这个类的超类。

class a extends Objectclass a //可以缺省

3.可以使用Object类型变量引用任何类型的对象。

Object e = new Employee("w1",100,1988,1,1);

4.在java中,只有基本类型不是对象,数组类型,不管是对象数组还是基本而类型的数组都可扩展于Object类。

int[] a = new int[3];Object obj = a;obj = new int[10];

5.Object类中的equals方法用于检测一个对象是否等于另外一个对象。该方法判断的是两个对象是否具有相同的引用。

6.在子类中定义equals方法时,首先调用超类的equals。如果检测失败,对象就不可能相等,如果超类中的域都相等了,就需要比较子类中的实体域了。7.java语言规范要求equals方法具有:a.自反性b.对称性c.传递性d.一致性e.非空引用返回false。

8.编写一个equals方法的思路:

a.检测是否引用同一对象。

b.检测比较对象是否为null。

c.检测是否属于同一个类。

d.对类中实体域进行比较。

9.散列码是由对象导出的一个整型值。没有规律。

10.由于hashCode方法定义在Object类中,因此每个对象都有一个默认的散列码,其值为对象的存储地址。

11.hashCode方法应该返回一个整型数值,并合理地组织实例域的散列码,以便能够让各个不同的对象产生均有的散列码。

12.equals方法与hashCode方法的定义必须一致:如果x.equals(y)返回true,那么x.hashCode()必须与y.hashCode()具有相同的值。

13.在Object类中,toString方法用于返回表示对象值得字符串。

14.如果x是任意一个对象,并调用

System.out.println(x);println方法就会直接调用x.toString(),并打印字符串。

15.Object类定义了toString方法,用来打印输出对象所属的类名和散列码。

相关实例程序

测试类

public class test {public static void main(String[] args){Employee w1 = new Employee("worker1",1000,1989,1,1);Employee w2 = w1;Employee w3 = new Employee("worker1",1000,1989,1,1);Employee w4 = new Employee("worker4",2000,1991,1,1);System.out.println("w1 == w2:"+(w1==w2));System.out.println("w1 == w3:"+(w1==w3));System.out.println("w1.equals(w3):" + w1.equals(w3));System.out.println("w1.equals(w4):" + w1.equals(w4));System.out.println("w4.toString():" + w4);Manager m1 = new Manager("m1",1000,1981,1,1);Manager m2 = new Manager("m1",1000,1981,1,1);m2.setBonus(100);System.out.println("m2.toString():" + m2);System.out.println("m1.equals(m2):" + m1.equals(m2));System.out.println("w1.hashCode():" + w1.hashCode());System.out.println("w3.hashCode():" + w3.hashCode());System.out.println("w4.hahaCode():" + w4.hashCode());System.out.println("m1.hahaCode():" + m1.hashCode());System.out.println("m2.hahaCode():" + m2.hashCode());}}

雇员类

import java.util.*;public class Employee {private String name;private Date hireDay;private double salary;public Employee(String n,double s,int year,int month,int day){name = n;salary = s;GregorianCalendar gr = new GregorianCalendar(year,month – 1,day);hireDay = gr.getTime();}public String getName(){return name;}public double getSalary(){return salary;}public Date getHireDay(){return hireDay;}public void raiseSalary(double p){double raise = salary * p / 100;salary += raise;}public boolean equals(Object otO){if(this == otO)return true;if(otO == null)return false;if(getClass() != otO)return false;Employee o = (Employee) otO;return Objects.equals(name, o.name) && salary == o.salary && Objects.equals(hireDay, o.hireDay);}public int hashCode(){return Objects.hash(name,salary,hireDay);}public String toString(){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);bonus = 0;}public double getSalary(){double baseSalary = super.getSalary();return baseSalary + bonus;}public void setBonus(double b){bonus = b;}public boolean equals(Object otO){if(!super.equals(otO))return false;Manager m = (Manager) otO;return bonus == m.bonus;}public int hashCode(){return super.hashCode() + 11 * new Double(bonus).hashCode();}public String toString(){return super.toString() + "bonus =" + bonus;}}输出结果

大把大把的时光从指缝间遛走,

我的java学习笔记(9)关于Object:所有类的超类

相关文章:

你感兴趣的文章:

标签云: