Java:验证在类继承过程中equals()、 hashcode()、toString()方法的使用
以下通过实际例子对类创建过程汇中常用的equals()、hashcode()、toString()方法进行展示,三个方法的创建过程具有通用性,在项目中可直接改写。
//通过超类Employee和其子类Manager ,验证在类继承过程中equals()、hashcode()、toString()方法的使用.
package equals;
public class EqualsTest{
public static void main(String[] args){
Employee alice1=new Employee("Alice Adams",75000,1987,12,15);
Employee alice2=alice1;//对象复制
Employee alice3=new Employee("Alice Adams",75000,1987,12,15);
Employee bob=new Employee("Bob Brandson",50000,1989,10,1);
System.out.println("alice1==alice2:"+(alice1==alice2));
System.out.println("alice1==alice3:"+(alice1==alice3));
System.out.println("alice1.equals(alice3):"+alice1.equals(alice3));
System.out.println("alice1.equals(bob):"+alice1.equals(bob));
System.out.println("bob.toStirng():"+bob);//使用toString()方法和输出bob对象的字符串形式
//创建子类Manager的对象变量
Manager carl=new Manager("Carl Cracker",80000,1987,12,15);
Manager boss=new Manager("Carl Cracker",80000,1987,12,15);
boss.setBluns(5000);
System.out.println("boss.toString():"+boss);
System.out.println("carl.equals(boss):"+carl.equals(boss));
System.out.println("alice1.hashCode():"+alice1.hashCode());
//调用hashcode()方法导出对象的散列码
System.out.println("alice3.hashCode():"+alice3.hashCode());
System.out.println("boss.hashCode():"+boss.hashCode());
System.out.println("carl.hashCode():"+carl.hahsCode());
}
}
//创建超类Employee
package equals;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Objects;
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;
}
//创建方法raiseSalary()
public void raiseSalary(double byPercent){
double raise=salary*byPercent/100;
salary+=raise;
}
//创建方法equals()
public boolean equals(Object otherObject){
if(this==otherObject){//检测this和otherObject是否引用同一对象
return true;
}
if(otherObject==null){//检测显式参数是否为null,是则返回false
return false;
}
if(getClass()!=otherObject.getClass()){
//比较this和otherObject是否属于同一个类,如果两者不属于同一个类,则不能进行equals()操作
return false;
}
//将otherObject转换成相应的类类型变量
Employee other=(Employee)otherObject;
//现在开始对所需要比较的域进行比较
return Objects.equals(name,other.name)
&&Objects.equals(salary,other.salary)//&&salary==other.salary这种写法是否可行?
&&Objects.equals(hireDay,other.hireDay);
}
public int hashCode(){
//Objects.hash()方法提供多个参数,
//对各个参数调用Objects.hashCode()方法获得各自的散列值,并组合这些散列值。
return Objects.hash(name,salary,hireDay);
}
public String toString(){
return getClass().getName()+"[name"+name+"salary="+salary+"hireDay="+hireDay+"]";
}
}
//创建Employee子类Manager
package equals;
public class Manager extends Employee{
private double bouns;//创建子类自身新的的实例域
public Manager(String n,double s,int year.int month,int day){
super(n,s,year,month,day);//调用超类的构造函数
bouns=0;
}
public double getSalary(){//覆写超类Employee的getSalary()方法
double baseSalary=super.getSalary();//调用超类的getSalary()
return baseSalary+bouns;
}
public void setBouns(double a){
bouns=a;
}
public boolean equals(Object otherObject){//覆写超类Employee的equals()方法
if(!super.equals(otherObject)){
return false;
}
Manager other=(Manager)otherObject;
return bouns==other.bouns;
}
public int hashCode(){
return super.hashCode()+17*new Double(bouns).hashCode();
}
public String toString(){
return super.toString()+"[bouns="+bouns+"]";
}
}
Java:验证在类继承过程中equals()、 hashcode()、toString()方法的使用的更多相关文章
- equals hashcode toString 方法的使用
package com.wu.toString; import java.util.Date; import java.util.GregorianCalendar; /** * * @author ...
- Java 中equals和toString()方法重写
1,equals方法 (1)什么时候需要重写? 如果希望不同内存但相同内容的两个对象equals时返回true,则需要重写equals (2)怎么重写? class A { public int i; ...
- CAS SSO:汇集配置过程中的错误解决方法
本教程为gevin.me原创文章,转载请注明: CAS SSO:配置过程中的错误解决方法 | Gevin’s Blog 本文将收集在配置CAS SSO遇到的所有错误,希望对大家有帮助,也方便下次搭建的 ...
- 问题:C# ToString("P");结果:c#中的常用ToString()方法总结
c#中的常用ToString()方法总结 很多类都重写了ToString方法, 导致很多类的tostring到底执行了什么,有哪些参数,都不清楚 对于int,double等的tostring: C ...
- c#中的常用ToString()方法总结
c#中的常用ToString()方法总结 对于int,double等的tostring: C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToStri ...
- JavaScript中Object.prototype.toString方法的原理
在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. ? 1 2 var arr = []; console.lo ...
- Java类继承关系中的初始化顺序
Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释. 非继承关系中的初始化顺序 对于非继承关系,主类Ini ...
- 《JS权威指南学习总结--9.3 JS中JAVA式的类继承》
内容要点: 一.JS中的类 1.JAVA或其他类似强类型 面向对象语言的 类成员的模样 实例字段:它们是基于实例的属性或变量,用以保存独立对象的状态. 实例方法: 它们是类的所有实例所共享的方法,由每 ...
- java中“”==“” equals hashcode的关系
ava中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比 ...
随机推荐
- NoSql数据库简介及Redis学习
NO-Sql数据库:Not Only不仅仅是SQL 定义:非关系型数据库:NoSQL用于超大规模数据的存储.(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据).这些类型的数据存储不需要固 ...
- 【学习笔记】深入理解超时调用(setTimeout)和间歇调用(setInterval)
超时调用(setTimeout):在指定的毫秒数后调用函数或计算表达式. setTimeout(func, 1000); // func执行的函数,1000毫秒 间歇调用(setInterval):按 ...
- Linux中的内核链表
链表中一般都要进行初始化.插入.删除.显示.释放链表,寻找节点这几个操作,下面我对这几个操作进行简单的介绍,因为我的能力不足,可能有些东西理解的不够深入,造成一定的错误,请各位博友指出. A.Linu ...
- Callable+Future+newFixedThreadPool的应用
最近在处理很多的数据,数据量比较大,但是处理的相对简单一些,没有什么复杂的业务逻辑,然后就使用了多线程去处理.因为一直停留在Thread和Runnable的知识中,项目中使用Callable,刚好可以 ...
- ZOJ 3811 Untrusted Patrol The 2014 ACM-ICPC Asia Mudanjiang Regional First Round
Description Edward is a rich man. He owns a large factory for health drink production. As a matter o ...
- thinkjs学习-this.assign传递数据和ajax调用后台接口
在页面加载时,就需要显示在页面上的数据,可以在后台使用this.assign赋值,在前台通过ejs等模板获取:用户点击按钮,或者触发某些事件和后台进行交互时,就需要用到ajax调用后台接口.本文通过一 ...
- Android滑动控件.md
1.概述 最近写代码临时加了个功能主要是滑动选择的功能效果图如下: 2.代码 这里主要是用属性动画做的 <ImageButton android:id="@+id/fab" ...
- HK2框架的简单自实现kunJ
kunJ kunJ框架,是基于HK2框架的一个自实现注入框架,功能比较简单,重在探索依赖注入的实现原理. 实现细节 自定义3个注解,Access,Inject,Service 在Service中实现对 ...
- MySQL存储引擎中的MyISAM和InnoDB区别
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点 ...
- echarts用法
参考文档: https://github.com/xlsdg/vue-echarts-v3 1.下载echarts插件 $ npm install --save vue-echarts-v3 2.引入 ...