Java中的Object类

一:什么是Object类;

  Object类是所有类的父类,相当于所有类的老祖宗,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类。

  Object类中的方法,适合所有子类。

二:toString()方法;

  在OBject类里面定义toString()方法的时候返回的对象的哈希code码(对象地址字符串)。

  如果我们在代码里直接输出一个对象,你会发现它输出的这个对象在内存中的地址,我们把它称为哈希码,它是通过哈希算法生成的一个字符串,是用来唯一区分对象的,可以想象为身份证号。

  可以通过重写toString()方法表示出对象的属性

举一个例子:

Initail主函数:

package com.test;

public class Initail {

    public static void main(String[]args){

        Dog dog = new Dog();//这里我们定义了一个dog对象
System.out.println(dog);//我们如果现在输入dog的值
}
}

Dog类:

package com.test;

//Dog对象继承于Animal类
public class Dog extends Animal{
public int age = 20;
public void eat(){
System.out.println("狗有吃骨头的能力");
}
public Dog(){
System.out.println("Dog类执行了");
}
public void method(){
eat();
}
}

Animal类:

package com.test;
//Animal类并没有明确表明它继承于那个类,他就相当于继承了Object类
public class Animal extends Object{
public int age=10;//为属性赋初值
public String name;
public void eat(){
System.out.println("动物是可以吃东西的"); }
public Animal(){
System.out.println("Animal类执行了"); }
}

运行结果为:

此时我们看到它输出的是dog类的包名+dog对象在内存中的地址

重写从父类继承来的toString)方法:

在Eclipse中的source下选择选项

确认即可完成

修改后的Dog类:

package com.test;

//Dog对象继承于Animal类
public class Dog extends Animal{
public int age = 20;
public void eat(){
System.out.println("狗有吃骨头的能力");
}
public Dog(){
System.out.println("Dog类执行了");
}
@Override
public String toString() {
return "Dog [age=" + age + "]";
}
public void method(){
eat();
}
}

运行结果为:

此时便输出了对象属性的值。

三:equals()方法;

equals()方法比较的是对象的引用是否指向同一块内存地址

Dog dog = new Dog();

这个dog对象并不是我们创建的对象,而是对象在内存中的地址,在操作对象的地址的时候相当于间接操作了对象的值。这个dog就是引用。

一般情况下比较两个对象时比较他的值是否一致,所以要进行重写。

举一个例子:

主函数Initail:

package com.test;

public class Initail {

    public static void main(String[]args){

        Dog dog = new Dog();//这里我们定义了一个dog对象
dog.age = 15;
Dog dog2 = new Dog();//继续创建一个dog对象
dog2.age = 15;
//比较两个对象是否符合equals
if(dog.equals(dog2)){
System.out.println("两个对象是相同的");
}
else{
System.out.println("两个对象是不相同的");
}
}
}

运行结果为:

  虽然我们赋给对象的值是相同的,但是new两个对象其实是开辟了两个不同的内存空间,因为equals对比两个内存地址是否相同,所以两个对象不同。

重写方法:

我们选择eclipse的source下的选项

Initail类:

package com.test;

public class Initail {

    public static void main(String[]args){

        Dog dog = new Dog();//这里我们定义了一个dog对象
dog.age = 15;
Dog dog2 = new Dog();//继续创建一个dog对象
dog2.age = 15;
//比较两个对象是否符合equals
if(dog.equals(dog2)){
System.out.println("两个对象是相同的");
}
else{
System.out.println("两个对象是不相同的");
}
}
}

Dog类:

package com.test;

//Dog对象继承于Animal类
public class Dog extends Animal{
public int age = 20;
public void eat(){
System.out.println("狗有吃骨头的能力");
}
public Dog(){
System.out.println("Dog类执行了");
}
@Override
public String toString() {
return "Dog [age=" + age + "]";
}
public void method(){
eat();
}
@Override
public boolean equals(Object obj) {
if (this == obj)//判断两个引用的值是否相同
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())//判断两个对象的类型是否相同
return false;
Dog other = (Dog) obj;
if (age != other.age)//两个属性的属性值是否相同
return false;
return true;
}
}

其中:getClass()方法比较两个类对象是否相同,类对象和类的对象的关注点如下

运行结果为:

Java学习笔记二十四:Java中的Object类的更多相关文章

  1. Java学习笔记二十八:Java中的接口

    Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...

  2. Java学习笔记二十六:Java多态中的引用类型转换

    Java多态中的引用类型转换 引用类型转换: 1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换: 2.向下类型转换(强制类型转换),是大类型到小类型的转换: 3.instanceof运算 ...

  3. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  4. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  5. (C/C++学习笔记) 二十四. 知识补充

    二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...

  6. Java学习笔记二十:Java中的内部类

    Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...

  7. 【Java学习笔记之三十四】超详解Java多线程基础

    前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...

  8. Java学习笔记二十二:Java的方法重写

    Java的方法重写 一:什么是方法的重写: 如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法. 语法规则 返回值类型.方法名.参数类型及个数都要与父类继承的 ...

  9. 【Java学习笔记之十四】Java中this用法小节

    用类名定义一个变量的时候,定义的只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法. 那们类里面是够也应该有一个引用来访问自己的属性和方法纳? 呵呵,JAVA提供了一个很好的东西,就是 t ...

随机推荐

  1. DevExpress控件使用之多重坐标图形的绘制 z

    有时候,基于对一些年份.月份的统计,需要集成多个数值指标进行分析,因此就需要把多种数据放到一个图形里面展现,也成为多重坐标轴,多重坐标轴可以是多个X轴,也可以是Y轴,它们的处理方式类似.本文通过一个例 ...

  2. Elasticsearch 架构原理

    为什么要学习架构? Elasticsearch的一些架构设计,对我们做性能调优.故障处理,具有非常重要的影响.下面将从Elasticsearch的准实时索引的实现.自动发现.rounting和repl ...

  3. IEEP-OSPF域内路由故障-现象与排障思路

    OSPF域内路由故障-现象与排障思路 一.故障现象 OSPF的或内路由故障常表现为邻居路由器不通告部分或全部路由,可能的原因通常为: 1).拟通告的接口上未启用OSPF 2).拟通告的接口被关闭 OS ...

  4. 浅析tnsping

    首先,先弄清楚tnsping是什么: Oracle Net 工具(命令)tnsping,是一个OSI会话层的工具,测试数据库服务的命令,用来决定是否一个Oracle Net 网络服务(service) ...

  5. Codeforces Round #239 (Div. 1)C, 407C

    题目链接:http://codeforces.com/contest/407/problem/C 题目大意:给一个长度为n的数列,m次操作,每次操作由(li, ri, ki)描述,表示在数列li到ri ...

  6. 如何在两个月的时间内发表一篇EI/SCI论文-我的时间管理心得

    在松松垮垮的三年研究生时期,要说有点像样的成果,也只有我的小论文可以谈谈了.可能有些厉害的角色研究生是丰富而多彩的,而大多数的同学在研究生阶段可能同我一样,是慢悠悠的渡过的,而且可能有的还不如我,我还 ...

  7. slf4j-api-1.5.8.jar

    资源介绍: 详细说明:slf4j-api-1.5.8.jar,jsp开发中使用FCK编辑器,要用到一个jar包-slf4j-api-1.5.8.jar, jsp development using t ...

  8. 从零一起学Spring Boot之LayIM项目长成记(二) LayIM初体验

    前言 接上篇,已经完成了一个SpringBoot项目的基本搭建.那么现在就要考虑要做什么,怎么做的问题.所以本篇内容不多,带大家一起来简单了解一下要做的东西,之前有很多人不知道从哪里下手,那么今天我带 ...

  9. Mybatis——实体类属性名和数据库字段名不同时的解决方案

    数据库的字段: 对应的实体类: 方案一: 在XML映射文件中使用的resultMap,优点:可以被重复使用. <resultMap id="BaseResultMap" ty ...

  10. MongoDB的角色作用(2)

    数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而MongoDB主打的就是海量数据架构, ...