Java之面向对象例子(三) 多态,重写,重载,equals()方法和toString()方法的重写
重写(继承关系)
子类得成员方法和父类的成员方法,方法名,参数类型,参数个数完全相同,这就是子类的方法重写了父类的方法。
重载
在一个类里有两个方法,方法名是完全一样的,参数类型或参数个数不同。
例子:
//父类
public class Pet {
public void eat(){
System.out.println("pet eat");
}
public void eat(String a){ //重载,同一个类,方法名相同,参数类型或个数不同
System.out.println("pet String eat");
}
}
//子类
public class Cat extends Pet{
public void eat(){ //重写
System.out.println("cat eat");
}
public void eat(int a){
System.out.println("cat int eat");
}
}
toString() 方法重写
返回该对象的字符串表示。通常,
toString方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
Object类的toString方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:getClass().getName() + '@' + Integer.toHexString(hashCode())
- 返回:
- 该对象的字符串表示形式。
直接调用 toString() 方法

还可以点击 Source 中的Genenrate toString() 方法来选择要使用该方法的参数 和方法 来生成官方的 toString() 方法
public class Pet {
public void eat(){
System.out.println("pet eat");
}
public void eat(String a){ //重载,同一个类,方法名相同,参数类型或个数不同
System.out.println("pet String eat");
}
@Override
//官方提供的重写toString() 方法
public String toString() {
return "Pet [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
+ "]";
}
}
equals方法重写
equals比较两个new实例化的对象返回结果一定为false,重写让他比较对象的属性
public boolean equals(Object obj)
- 指示其他某个对象是否与此对象“相等”。
equals方法在非空对象引用上实现相等关系:
- 自反性:对于任何非空引用值
x,x.equals(x)都应返回true。- 对称性:对于任何非空引用值
x和y,当且仅当y.equals(x)返回true时,x.equals(y)才应返回true。- 传递性:对于任何非空引用值
x、y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)应返回true。- 一致性:对于任何非空引用值
x和y,多次调用 x.equals(y) 始终返回true或始终返回false,前提是对象上equals比较中所用的信息没有被修改。- 对于任何非空引用值
x,x.equals(null)都应返回false。
Object类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值x和y,当且仅当x和y引用同一个对象时,此方法才返回true(x == y具有值true)。注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
- 参数:
obj- 要与之比较的引用对象。- 返回:
- 如果此对象与 obj 参数相同,则返回
true;否则返回false。
instanceof
java中的instanceof运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
public class Pet {
private String name;
private String sex;
public void eat(){
System.out.println("pet eat");
}
public void eat(String a){ //重载,同一个类,方法名相同,参数类型或个数不同
System.out.println("pet String eat");
}
@Override
//官方提供的重写toString() 方法
public String toString() {
return "Pet [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
+ "]";
}
public boolean equals(Object obj){
if(obj!=null){
if(obj instanceof Pet){ //判断传入的对象是不是Pet类的
Pet t1=(Pet)obj; //将obj强制转换成Pet
return this.equals(t1.name)&&this.equals(t1.sex); //判断当前对象的属性是否相同
}
}
return false;
}
}
父类的引用指向子类的对象。
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Pet c=new Cat();
c.eat();
}
}

Java之面向对象例子(三) 多态,重写,重载,equals()方法和toString()方法的重写的更多相关文章
- Java 如何重写对象的 equals 方法和 hashCode 方法
前言:Java 对象如果要比较是否相等,则需要重写 equals 方法,同时重写 hashCode 方法,而且 hashCode 方法里面使用质数 31.接下来看看各种为什么. 一.需求: 对比两个对 ...
- Java基础系列-equals方法和hashCode方法
原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述 equals方法和hashCode方法都是有Object类定义的. publi ...
- HashSet中存方用户自己定义数据类型数据,重写equals方法和hashCode方法
import java.util.Set; import java.util.HashSet; public class SetTest { public static void main(Strin ...
- java中equals方法和hashcode方法的区别和联系,以及为什么要重写这两个方法,不重写会怎样
一.在Object类中的定义为:public native int hashCode();是一个本地方法,返回的对象的地址值.但是,同样的思路,在String等封装类中对此方法进行了重写.方法调用得到 ...
- JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法
在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address { priva ...
- Java重写equals方法和hashCode方法
package com.ddy; public class User { private Integer id; private String name; private St ...
- 对象作为 map 的 key 时,需要重写 equals 方法和 hashCode 方法
对象作为 map 的 key 时,需要重写 hashCode 和 equals方法 如果没有重写 hashCode 方法,那么下面的代码示例会输出 null 我们首先定义一个对象:BmapPoint, ...
- 【转】为什么要重写hashcode()方法和toString()方法
Object 类 包含toString()和hashCode()方法. 一.toString(): 在Object类里面定义toString()方法的时候返回的对象的哈希code码,这个hashcod ...
- Java equals()方法和hashCode()方法
equals()方法 如果满足了以下任何一个条件,就不需要覆盖equals()方法: 1 类的每个实例本质上都是唯一的. 2 不关心类是否提供了“逻辑相等”的测试功能. 3 父类已经覆盖了equals ...
随机推荐
- 移动端H5通用表单验证插件
将表单验证的通用部分提炼出来,做成一个简易插件,方便调用. 已将源码放到GitHub上,名字叫zValidate. 手机可扫描下图查看示例,PC端可点击此处查看: 一.原理 1)需要引入zepto.j ...
- 设计模式一:关于C++写观察者模式的一些收获
先贴上部分代码: #include "stdafx.h" #include<iostream> #include<string> #include<v ...
- 用 Hexo + Github 搭建自己的博客
扯在前面 在很久很久以前,一直就想搭建属于自己的一个博客,但由于各种原因,最终都不了了之,恰好最近突然有了兴趣,于是就自己参照网上的教程,搭建了属于自己的博客. 至于为什么要搭建自己的博客了?哈哈,大 ...
- Dojo初探之1:AMD规范,编写符合AMD规范(异步模块加载机制)的模块化JS(其中dojo采用1.11.2版本)
一.AMD规范探索 1.AMD规范(即异步模块加载机制) 我们在接触js的时候,一般都是通过各种function来定义一些方法,让它们帮我们做一些事情,一个js可以包含很多个js,而这些functio ...
- 9个常用iptables配置实例
iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙.NAT.咋一看iptables的配置很复杂,掌握规律后,其实用iptables完成指定任务并不难,下面我们通过具体实例,学习ip ...
- jquery.qrcode.min.js(支持中文转化二维码)
详情请看:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/jqueryqrcodeminjs/ 今天还是要讲一下关于二维码的知识,前 ...
- JS获取浏览器类型和版本号
JS获取浏览器类型和版本号,增加了IE11的判断. 2015/7/5更新: 简化代码逻辑 var zbrowser = {} var ua = navigator.userAgent.toLowerC ...
- MongoDB--GridFS 文件存储系统
GridFS是Mongo的一种专门用存储小型文件的功能. 使用于下列场景: 1.写入文件:mongofiles put 文件路径 注意,当前mongo实例链接的哪个库,将写文件在哪个实例里面的grid ...
- 浅谈Cordova框架的一些理解
前言 因为工作原因,最近需要研究Cordova框架,看了其中的源码和实现方式,当场在看的时候马上能理解,但是事后再回去看相关源码时候却发现之前理解的内容又忘记了,又不得不重新开始看,所以总觉得需要记录 ...
- Array.apply(null,{length:20})与new Array(20)的区别
Array.apply(null,{length:20}) 这句代码的实际意义:创建长度为20的一个数组,但并非空数组. 跟new Array(20)的区别在于,前一种创建方式,得到的数组中的每一个元 ...