Object(所有类的超类)一些有用的方法讲解与实例演示


Object是所有类的始祖,java中的每个类的都是它拓展而来的。

Object的euqals方法、hashCode方法、getClass方法和toString方法在操作对象时是非常有用的方法。

    1.euqals方法

     euqals方法用于检测一个对象是否等于另外一个对象(两个对象是否指向同一块存储区域),java语言规范要求euqals方法具有以下特性:

自反性、对称性、传递性、一致性并且对于任意的非空引用x,x.equals(null)应返回false.

java7在java.util包下新增了Objects工具类,用于操作对象,下面是其原版API的介绍:

public final class Objects extends Object

This class consists of static utility methods for operating on objects.

These utilities include null-safe or null-tolerant methods for computing the hash code of an object, returning a string for an object, and comparing two objects. Since: 1.7

2.hashCode方法

hashCode(散列码)是由对象导出的一个整型值,没有规律。

特别注意euqals方法和hashCode方法必须一致,如果x.euqals(y)返回true,那么x.hashCode()=y.hashCode()

3.toString方法

toString方法用于返回表示对象的字符串。

如果要打印多维数组,需要调用java.util.Arrays.deepToString()方法。java.util包下从jdk1.2开始增加的Arrays工具类,包含了大量操作数组的有用的方法,它也重写了Object的很多方法,用于操作对象。

4.getClass方法

返回包含对象信息的类对象,java提供了类运行时的描述,它的内容被封装在java.lang.Class类中。

java.lang.Class类的方法:

String getName()            ----   返回这个类的名字

Class getSuperClass()       ----   以Class对象的形式返回这个类的超类信息

下面是一个完整的实例,以一个员工类的例子演示了这几个方法的应用(请于不低于JDK1.7环境编译运行):

1.员工类

/**
*员工类
*/
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Objects;
public class Employee
{
	/**
	*@param name 员工姓名
	*@param salary 员工工资
	*@param hireDate 雇用日期
	*/
	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 getDate()
	{
		return name;
	}
	public double getSalary()
	{
		return salary;
	}
	public Date getHireDay()
	{
		return hireDay;
	}
	/**
	*涨工资的方法
	*/
	public void raiseSalary(double byPercent)
	{
		double raise=salary*byPercent/100;
		salary+=raise;
	}
	/**
	*重写euqals方法、hashCode方法和toString方法
	*/
	@Override
	public boolean equals(Object obj)
	{
		if(this==obj)	return true;
		if(obj==null)	return false;
		if(getClass()!=obj.getClass())	return false;
		Employee other=(Employee)obj;
		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()
	{
		return "\t"+getClass().getName()+"\t员工姓名:\t"+name+"\t员工工资:\t"+salary+"\t雇用日期:\t"+hireDay;
	}
}

2.经理类(继承员工)

/**
*经理类 增加了奖金字段
*/
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 void setBonus(double b)
	{
		bonus=b;
	}
	/**
	*重写Employee的getSalary、equals和方法
	**/
	@Override
	public double getSalary()
	{
		double base=super.getSalary();
		return base+bonus;
	}
	@Override
	public boolean equals(Object obj)
	{
		if(!super.equals(obj))	return false;
		Manager other=(Manager)obj;
		return other.bonus==bonus;
	}
	@Override
	public String toString()
	{
		return super.toString()+"\t经理奖金:\t"+bonus;
	}
}

3.测试类

//测试类
/**
*@author [email protected]
*@version 1.0 2015-04-17
**/
public class Test
{
	public static void main(String[] args)
	{
		Employee tom=new Employee("Tom",7500,2010,3,15);
		Employee tom1=tom;
		Employee tom2=new Employee("Tom",7500,2010,3,15);
		tom1.raiseSalary(15);
		Manager bob=new Manager("Bob",10000,2010,3,15);
		bob.raiseSalary(10);
		bob.setBonus(25000);
		System.out.println("tom==tom1:\t"+(tom.equals(tom1)));
		System.out.println("tom==tom2:\t"+(tom.equals(tom2)));
		System.out.println("bob=======\t"+bob);
		System.out.println("tom=======\t"+tom);
		System.out.println("tom1======\t"+tom1);
		System.out.println("tom2======\t"+tom2);
	}
}

时间: 2024-08-05 11:12:17

Object(所有类的超类)一些有用的方法讲解与实例演示的相关文章

System.Array 类提供了许多有用的方法和属性,用于排序、搜索和复制数组。

数组是引用类型,数组作为方法的参数使用时,应注意in.ref.out声明的用法. 第4章  C#语句 32 4.1  使用break语句 33 break 语句用于终止最近的封闭循环或它所在的switch语句. 4.2  使用continue语句 34 continue 语句将控制权传递给它所在的封闭迭代语句的下一次迭代. 4.3  使用do语句 36 do 语句重复执行{}中的一个语句或语句块,直到指定的表达式计算为 false. 4.4  使用foreach语句 37 foreach 语句为

我的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[]

Object:所有类的超类

Object类是所有类的始祖,但是不用显示的用extends关键字,如果没有extends任何类,Object就会被认为是这个类的超类. 在Java中,只有基本类型(byte.short.char.int.long.float.double.boolean)不是对象.但是基本类型数组都是拓展于Object类. Object类中常用的方法: public boolean equals:用于检测一个对象是否等于另外一个对象,在Object类中,这个方法将判断两个对象是否具有相同的引用.如果两个对象具

20140526-一个从pdf转换成图片的类,工作当中有用到

20140526-一个从pdf转换成图片的类,工作当中有用到 package com.jako.database.model; import java.awt.Image; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import

Object对象类

Object对象类是所有类的祖先,他是默认自动继承的 Java为什么要做一个对象类呢?对象类的目的就是归一了类型,他就是把所有的类所有的对象归纳成为 Object类型.因为对象他认为对象应该拥有一些什么方法和属性全部都定制下来.那么就也就规定了今后的都有哪些方法和属性. toString():String方法是父类留下来的一个方法,如果不重写那么就由Object来实现,如果重写那么这个方法就能写很多的东西.toString()方法其实 是用来打印一些类的信息来说明类的一些问题, toString

5.1 类、超类和子类

5.1 类.超类和子类 子类比超类拥有的功能更加丰富. 在本例中,Manager类比超类Employee封装了更多的数据,拥有更多的功能. 在Manager类中,增加了一个用于存储奖金信息的域,以及一个用于设置这个域的方法: class Manager extends Employee { private double bonus; ... public void setBouns(double b) { bonus = b; } } 如果有一个Manager对象,就可以使用setBonus方法

Core Java (十一) Java 继承,类,超类和子类

Core Java (十一) Java 继承,类,超类和子类 标签: javaJavaJAVA 2013-01-22 17:08 1274人阅读 评论(0) 收藏 举报  分类: java(58) 读书笔记(46)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 继承关系 两个类之间存在三种关系: 依赖,uses-a,如果一个类的方法操纵另一个对象,我们就说一个类依赖于另一个类. 聚合(关联),has-a,一个对象包含另外一个对象,聚合关系意味着类A的对象包含类B的对象

System.Object 基类

System.Object 基类 System.Object在.Net中是所有类型的基类,任何类型都直接或间接地继承自System.Object.没有指定基类的类型都默认继承于System.Object. 基类特性 正由于所有的类型都继承于System.Object.因此,所有的类型都具有下面这些特性: GetType()方法,获取对象的类型. Equals.ReferenceEquals和==,判断对象是否相等. ToString()方法,获取对象的字符串信息,默认返回对象带命名空间的全名.

Java类、超类、包

定义和实例化与C#相同 特殊变量 super当前对象的父类,用于调用父类的变量和方法 this当前类对象 存取限制有3个 没有C#的interval,其他一样. public protected,类和派生类 private,类内部 继承 与C#一样,不能多重继承,多重继承用接口.用extends 基类.超类就是C#的基类 包 一组类.就是C#的命名空间,引用时用import