`
incyanggan
  • 浏览: 34066 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Java菜鸟学习笔记--面向对象篇(十六):Object类方法

 
阅读更多

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葵花宝典2017-2018

    《菜鸟Java葵花宝典2017-2018》是一本专注于Java学习与面试的资源集合,旨在帮助初学者系统地掌握Java编程语言并为面试做好充分准备。这本书可能涵盖了Java的基础知识、进阶特性、设计模式以及常见面试问题等内容。...

    菜鸟的SAP自学学习笔记

    ### SAP自学学习笔记知识点概述 #### 一、配置总体框架 **1.1 系统环境** - **定义**: 指的是SAP系统的基本硬件和软件环境。 - **重要性**: 正确配置系统环境是确保SAP系统正常运行的基础。 - **涉及内容**: - ...

    Java基础知识笔记详细版-菜鸟翻阅必备

    - 面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态三大特性。 - 平台无关性:通过Java虚拟机(JVM)实现了“一次编写,到处运行”的目标。 - 健壮性:具有自动垃圾回收功能,减少了内存泄漏等问题。...

    JAVA菜鸟面试题库

    综上所述,面对JAVA面试,面试者应当注重技术基础的学习与积累,并在此基础上提升自己的综合能力,包括但不限于沟通技巧、团队协作能力等。同时,了解当前市场的薪资水平和公司招聘偏好有助于更好地定位自己,为未来...

    C++学习笔记- 面向对象 .md

    内容是C++面对对象的,目录大致来源于菜鸟文档的C++面向对象,笔记是参考各种文章以及菜鸟文档改编的,内容包含C++类和对象(类定义和对象定义,类成员函数,类访问修饰符,友元函数,内联函数,this指针,静态成员...

    java学习类网站,让你有菜鸟变高手

    ### Java学习资源汇总:从入门到精通 #### 引言 随着互联网技术的快速发展与迭代,Java作为一门经典的编程语言,依然占据着重要的地位。对于初学者或是希望提升技能的人来说,选择合适的在线学习资源至关重要。...

    Java学生管理系统——菜鸟

    - **面向对象编程**:Java是一种面向对象的语言,系统的核心会涉及类的设计,包括学生类、班级类、教师类等,每个类都会有自己的属性和方法。 - **控制结构**:如if-else语句、switch-case、for、while循环用于...

    java学习1-3课笔记

    这份"java学习1-3课笔记"涵盖了初学者入门Java的基础知识,由张孝祥老师的课程内容整理而成,适合对编程感兴趣的菜鸟们作为学习参考资料。 1. **Java简介**: Java是由Sun Microsystems(现为Oracle Corporation的...

    Android studio1.3.1从菜鸟到高手--第一季-视频-百度盘

    根据提供的文件信息,我们可以推断出这是一套关于Android Studio 1.3.1的教学视频资料,主要面向初学者到进阶用户。接下来,我们将基于这些信息深入探讨相关的知识点。 ### Android Studio 1.3.1简介 Android ...

    20210808-银河证券-交通运输行业:菜鸟网络业绩表现持续向好,京东航空获批筹建.rar

    标题中的“20210808-银河证券-交通运输行业:菜鸟网络业绩表现持续向好,京东航空获批筹建”表明这是一份由银河证券发布的关于2021年8月8日交通运输行业的研究报告,重点提及了菜鸟网络的业务发展情况以及京东航空的...

    C#制作麻将游戏源码,

    此外,“对刚学OO思想想俺一样的菜鸟或许有那么点帮助”暗示源码可能包含了一些面向对象编程(Object-Oriented Programming, OOP)的基础应用,如继承、封装和多态性。 【标签】:“winForm程序”说明这个游戏是...

    JAVA初学者笔记 使用JAVA理解逻辑基础-菜鸟入门(简单易懂)

    Java提供了两个主要的技术开发平台:Java SE(标准版)用于桌面应用程序的开发,而Java EE(企业版)则针对网络程序和企业级应用。 要开始学习Java,你需要安装JDK(Java Development Kit),并配置相应的环境变量...

    大数据开发资源.docx

    - **学习途径**:建议使用在线教程(如菜鸟教程)进行入门学习。 **1.2 SQL基础** - **学习目标**:熟悉SQL语法,能够熟练地进行数据查询和简单的数据分析。 - **学习途径**:同样可以通过在线教程或书籍进行学习...

    基于Java语言教程&案例&相关项目资源

    - **类与对象**:理解类与对象的基本概念及其关系,学会定义类和创建对象。 - **继承**:掌握类继承的概念,学会使用extends关键字实现继承。 - **封装**:了解封装的作用,掌握private、public、protected等访问...

    runoob菜鸟教程网站镜像

    - **适用对象**:主要面向编程初学者和技术爱好者。 - **应用场景**: - **自学**:利用runoob提供的资源进行自我提升。 - **备课**:教师可以借助这些资源准备课程材料。 - **项目参考**:开发者在项目开发过程...

    java课程设计:基于java实现的单机五子棋游戏的源代码.zip

    - **面向对象编程**:Java是一种面向对象的编程语言,五子棋游戏的实现将涉及到类的设计,如棋盘类、棋子类、玩家类等。 - **图形用户界面(GUI)**:游戏通常需要一个友好的用户界面,Java中的Swing或JavaFX库...

Global site tag (gtag.js) - Google Analytics