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. Redis安装测试(待完善)

    1 Redis安装 在网址http://redis.io/下载redis-3.2.3.tar.gz,解压. 进入解压目录 编译和安装,具体配置项可参考自带的README.md文件 make test ...

  2. golang笔记——数据类型

    25个关键字 程序声明:import, package 程序实体声明和定义:chan, const, func, interface, map, struct, type, var 程序流程控制:go ...

  3. python - 图例显示中文

    # -*- coding: utf-8 -*- """ Created on Mon Nov 30 13:24:00 2015 @author: jx_luo " ...

  4. 构造Scala开发环境并创建ApiDemos演示样例项目

    从2011年開始写Android ApiDemos 以来.Android的版本号也更新了非常多,眼下的版本号已经是4.04. ApiDemos中的样例也添加了不少,有必要更新Android ApiDe ...

  5. js 数字添加逗号,格式化数字

    function addCommas(nStr) { nStr += ''; x = nStr.split('.'); x1 = x[0]; x2 = x.length > 1 ? '.' + ...

  6. javascript动画效果之多物体透明度

    html和css 仅为布局,需要注意的是filter对应的是老版本的ie浏览器透明度,而opacity对应的其他浏览器的透明度 filter: alpha(opacity: 50); opacity: ...

  7. Servlet、Filter、Listener、Interceptor基础

    第一:Servlet Servlet是个接口,全限定名是javax.servlet.Servlet,在javax.servlet包中,在servlet-api.jar(在tomcat自带的lib文件夹 ...

  8. hdu_1253_胜利大逃亡(bfs+剪枝)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 题意:三维BFS,不解释 题解:DFS+剪枝会超时,裸BFS会超时,BFS+剪枝才能AC,有点伤 ...

  9. 在Ubuntu虚拟机搭建数据库系统

    连接数据库: mysql -uroot -p 输入数据库密码即可登陆. 查看mysql版本信息: mysql> select version(); +---------------------- ...

  10. Slow HTTP Denial of Service Attack漏洞整改方法

    前期现场反馈系统扫描出Slow HTTP Denial of Service Attack漏洞,根据以往经验提供了更改建议,居然没有生效,深入研究了一下WebLogic下该漏洞的修复方法,现记录如下: ...