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

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

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

class a extends Object

class 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;
	}
}

输出结果

时间: 2024-10-16 15:03:50

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

Java学习笔记_22_Set接口的实现类

22.Set接口的实现类: Set接口存放的元素是无序的且不包括反复元素. 1>实现类HashSet: HashSet类依据元素的哈希码进行存放,取出时也能够依据哈希码高速找到.HashSet不保存元素的加入的顺序. 样例: import java.util.HashSet; import java.util.Iterator; public class Student { public static void main(String[] args) { HashSet<String>

Java学习笔记49(DBUtils工具类二)

上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自己的存款 主键 帐户名 余额 1 张三 1000 2 李四 10 要从张三的账户余额中转账800到李四账户 SQL语句实现: update xx set 余额 = 余额-800 where 主键=1 update xx set 余额 = 余额+800 where 主键=2 虽然操作成功,但是会出现问

JAVA学习笔记(四十八)- 适配器类 Adapter

适配器类 Adapter,对接口中的抽象方法进行空实现 import java.awt.Button; import java.awt.Frame; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEve

Java学习笔记48(DBUtils工具类一)

上一篇的例子可以明显看出,在增删改查的时候,很多的代码都是重复的, 那么,是否可以将增删改查封装成一个类,方便使用者 package demo; /* * 实现JDBC的工具类 * 定义方法,直接返回数据库的连接对象 * */ import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Stat

Java学习笔记—多线程(并发工具类,java.util.concurrent.atomic包)

在JDK的并发包里提供了几个非常有用的并发工具类.CountDownLatch.CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程间交换数据的一种手段.本章会配合一些应用场景来介绍如何使用这些工具类. CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作.假如有这样一个需求:我们需要解析一个Excel里多个sheet的数据,此时可以考虑使用多线程,每个线程解析一个sheet里的数据,

Java学习笔记(1)——ThreadLocal类的使用

主要是对博客的一些自己的理解和补充  地址:http://www.cnblogs.com/-new/p/7604420.html 概述: 这里套用该博主的实验代码: public class T { ThreadLocal<Long> longLocal = new ThreadLocal<Long>(); public void set() { longLocal.set(Thread.currentThread().getId()); } public long getLong

JAVA学习笔记(五十八)- InetAddress类与URL

InetAddress类 /* * InetAddress类   */ public class Test07 {    public static void main(String[] args) throws UnknownHostException {        //获取本机的InetAddress实例          System.out.println("*******获取本机... www.songtaste.com/user/10258631/infowww.songtast

effective java学习笔记之不可实例化的类

在没有显式声明一个类的构造方法时,编译器会生成默认的无参构造方法,在设计工具类时,我们通常将方法设置成静态方法,以类名.方法名的形式调用,此时这个类就没有必要创建实例,我们知道抽象类不可以被实例化,但是它可以被子类继承,子类可以被实例化,要想一个类不能被实例化,只需要显式地将类的构造方法设为私有域,这样就不可以被外部类的方法进行实例化了,而且子类也无法继承构造方法为私有的父类 package com.test; public class NoChildClass { private NoChil

java学习笔记10--泛型总结

java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note10.html,转载