Object类


什么是Object类?

Object类是所有Java类的祖先,每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法Object类是类层次结构的根,Object类是Java中唯一没有父类的类。其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法。

Object类方法有哪些?

toString方法

首先toString()方法是Object根类的一个默认方法

咱试一试输出一下默认的方法
//重写toString方法
package me.tostring; public class ToString{ public static void main(String[] args){ Dog jim=new Dog();
System.out.println("Dog "+jim);//直接在里面jim,默认等于jim.toString() }
} class Dog{ }

然后编译后运行,输出结果为:

/*输出:
Dog me.tostring.Dog@545ec940
*/

为什么会是这样呢?既然是父类Objcet定义的方法,那就去文档查看说明




说明中看出了两点:1.默认的方法是返回 如上的格式。2.推荐子类根据需求重写这个方法

那就重写试一试咯,以防在Override时候书写出错,直接在文档copy方法声明肯定错不了~

//重写toString方法
package me.tostring; public class ToString{ public static void main(String[] args){ Dog jim=new Dog();
System.out.println("Dog "+jim);
/*输出:
Dog me.tostring.Dog@545ec940
*/ }
} class Dog{ //重写方法
@Override
public String toString(){ return "这个方法被我重写了"; } }

其中

@Override//这是什么意思?-意思告诉编译器下面的方法我是要重写父类的,你检查严格点,不是重写(拼写错误等等)会编译报错

编译运行


Dog 这个方法被我重写了

成功Override这个方法。

equals方法的运用与重写

文档中关于equals的解释

equals()--和老婆买猫的故事

今天和老婆去逛街,正好看见猫,长得和加菲猫差不多,看着合适准备入手,和小饭谈好价格交了押金然后取钱去了

class Cat{
//猫的一些特征
private String color;
private String height;
private String weight; Cat(){}
Cat(String color,String height,String weight){
this.color=color;
this.height=height;
this.weight=weight;
}
}

预订好的猫

Cat huahua=new Cat("red","2","3");

然后回来了,坑爹小贩把猫卖给别人了,老婆当然不愿意了,小贩说还有一直一模一样的猫,您看着应该也合适

Cat ruhua=new Cat("red","2","3");

合适不?看看咯

System.out.println(huahua == ruhua);//输出false
//按老婆这个算法买一万只也不一样,== 判断依据是引用的指向空间地址是否一样啊

这样比较一万只猫也不一样啊,换个方式比较咯,那就用Object的提供的equals()方法吧

System.out.println(huahua.equals(ruhua));//输出false,还是不一样哪里出问题了?

哪里问题?看文档如上,原来equals默认按是否指向同一个对象为依据啊~,那就只有重写咯

	@Override//生命老子要改写了,编译器你注意着点
//看完文档直接复制声明,以防出错,双保险
public boolean equals(Object obj){
//第一种情况,空引用,什么都不是肯定返回false啊
if(obj == null) return false;
//第二种情况,首先你是猫,我再看你颜色身高体重一样不
else if(obj instanceof Cat){ //既然是猫就转换类型
Cat mimi=(Cat)obj;
//判断身高体重颜色是不是一样,一样我就买
if(this.color==mimi.color&&this.height==mimi.height&&this.weight==mimi.weight){
return true;
}
//身高体重不一样我就认为和刚刚那一只不一样,
else return false;
}
//其他情况可能是什么老虎啊什么的当然不买咯
else return false; }

这回看你还不一样不?这回趁心如意了,只有外观差不多都是加菲猫~

	System.out.println(huahua.equals(ruhua));//这会儿一样了把,老婆高兴了吧

高高兴兴回家了。

源码

//陪老婆买猫
package me.equals; public class Equals{ public static void main(String[] args){ Cat huahua=new Cat("red","2","3");
//看中了猫交押金回家拿钱,结果猫给人先买走了,小贩说有只一模一样的啊
Cat ruhua=new Cat("red","2","3");
//老婆说看一样不一样就买
System.out.println(huahua == ruhua);//输出false
//按老婆这个算法买一万只也不一样,== 判断依据是引用的指向空间地址是否一样啊
//那就用Object的提供的equals()方法吧
System.out.println(huahua.equals(ruhua));//输出false,还是不一样哪里出问题了?
//查文档,原来默认的equals()方法坑爹啊,也是是否指向同一对象为依据
//那就改写这个方法咯 System.out.println(huahua.equals(ruhua));//这会儿一样了把,老婆高兴了吧 } }
//猫类
class Cat{
//猫的一些特征
private String color;
private String height;
private String weight; Cat(){}
Cat(String color,String height,String weight){
this.color=color;
this.height=height;
this.weight=weight;
} @Override//生命老子要改写了,编译器你注意着点
//看完文档直接复制声明,以防出错,双保险
public boolean equals(Object obj){
//第一种情况,空引用,什么都不是肯定返回false啊
if(obj == null) return false;
//第二种情况,首先你是猫,我再看你颜色身高体重一样不
else if(obj instanceof Cat){ //既然是猫就转换类型
Cat mimi=(Cat)obj;
//判断身高体重颜色是不是一样,一样我就买
if(this.color==mimi.color&&this.height==mimi.height&&this.weight==mimi.weight){
return true;
}
//身高体重不一样我就认为和刚刚那一只不一样,
else return false;
}
//其他情况可能是什么老虎啊什么的当然不买咯
else return false; } }

equals()--String类默认重写

String类默认已经对由Object继承过来的equals()方法重写了,怎么样?查文档就知道了

文档说明很明确,返回true的前提是:

参数不为null

这个参数是个String对象并且存储的字符串和调用者存储的字符串一模一样

这两个成立就可以返回true了。

作者:YangGan

出处:

http://blog.csdn.net/incyanggan

本文基于
署名 2.5 中国大陆
许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan
(包含链接).

Java菜鸟学习笔记--面向对象篇(十六):Object类方法的更多相关文章

  1. Java菜鸟学习笔记--面向对象篇(十五):Wrapper Class包装类

    什么是包装类? 在Java里一切都是对象,除了Java中的基本数据类型(byte,short,int,long,char,float,double,boolean)不是面向对象的,这在实际使用时存在很 ...

  2. Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态

    Polymorphism[多态] 简述: 面向对象多态性指的是:发送消息给某个对象,让该对象自行决定响应何种行为. 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用 多态的三个前提条件: 多 ...

  3. Java菜鸟学习笔记()--面向对象篇(七):Wrapper Class包装类

    什么是包装类? 在Java里一切都是对象,除了Java中的基本数据类型(byte,short,int,long,char,float,double,boolean)不是面向对象的,这在实际使用时存在很 ...

  4. Java菜鸟学习笔记--数组篇(三):二维数组

    定义 //1.二维数组的定义 //2.二维数组的内存空间 //3.不规则数组 package me.array; public class Array2Demo{ public static void ...

  5. Java菜鸟学习笔记--数组篇(二):数组实例&args实例

    基本类型实例 //1.定义一个一维数组,先声明,在分配空间 int []number;//生命,没有初始化,number=null number=new int[5];//初始化为默认值,int默认值 ...

  6. Java菜鸟学习笔记--Exception篇(一):异常简介

    什么是异常(Exception)? 简述: 在运行过程中,应用程序可能遭遇各种严重程度不同的问题.异常提供了一种在不弄乱程序的情况下检查错误的巧妙方式.它也提供了一种直接报告错误的机制. 不同类型异常 ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十六章:实例化和截头锥体裁切

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十六章:实例化和截头锥体裁切 代码工程地址: https://git ...

  8. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  9. Dynamic CRM 2013学习笔记(四十六)简单审批流的实现

    前面介绍过自定义审批流: Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示 Dynamic CRM 2013学习笔记(二十一)自定义审批流2 - 配置按钮 Dynamic ...

随机推荐

  1. C#-简单的定时器(C# ConsoleApp) ---ShinePans

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hpbmVwYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  2. Linux下Nagios

    Linux下Nagios的安装与配置   一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机 ...

  3. eclipse打不开data目录解决的方法

    1.首先手机必须详细root权限.没有的话,先去root. 2.root过后若还是不能打开,下载一个R.E管理器,然后将须要打开的目录设置为可读.可写.可运行. 附图:

  4. JVMTI 中间JNI系列功能,线程安全和故障排除技巧

    JVMTI 中间JNI系列功能,线程安全和故障排除技巧 jni functions 在使用 JVMTI 的过程中,有一大系列的函数是在 JVMTI 的文档中 没有提及的,但在实际使用却是很实用的. 这 ...

  5. 堆VS栈

    c#堆VS栈(Part One) 前言 本文主要是讲解C#语言在内存中堆.栈的使用情况,使读者能更好的理解值类型.引用类型以及线程栈.托管堆. 首先感谢原文作者:Matthew Cochran 为我们 ...

  6. Vs2012 构建配置 Lua5.2.3

    随着手机游戏client程序员,当然,遇到这样的问题,该游戏已经提交出版.但第二天一早,发现有一个逻辑游戏BUG.怎么办,不严重,在一般情况下,非强制性的更新.假设一个严重BUG,他们将不得不强制更新 ...

  7. Java初认识--环境搭建及基本数据类型

    一.JAVA语言的环境搭建 1.JRE(Java Runtime Environment):Java运行环境. 它包括Java虚拟机和Java程序所需的核心类库等. 2.JDK(Java Develo ...

  8. linux cat

    cut是一个选取命令,就是将一段数据经过分析,取出我们想要的.一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的. (1)其语法格式为:cut  [-bn] [file] 或 cut ...

  9. Notepad++ 配置 支持jquery、html、css、javascript、php代码提示

    原文:Notepad++ 配置 支持jquery.html.css.javascript.php代码提示 官网下载:http://notepad-plus-plus.org/ 获取插件的方法:打开软件 ...

  10. Swift 制作一个新闻通知中心插件1

    使用 Swift 制作一个新闻通知中心插件(1) 随着 iOS 8 的发布,苹果为开发者们开放了很多新的 API,而在这些开放的接口中 通知中心插件 无疑是最显眼的一个.通知中心就不用过多介绍了,相信 ...