第1关,Object类

第1关:Object类

300

任务要求

参考答案

任务描述

相关知识什么是Object类

Object类的方法

Java对象克隆

编程要求

测试说明

任务描述

本关任务:掌握Object类及Object类的一些常用方法。

相关知识

为了完成本关任务,你需要掌握:

1.什么是Object类;

2.Object类的方法;

3.Java对象克隆。

什么是Object类

Java中有一个比较特殊的类,就是 Object 类,它是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类就默认继承 Object 类。因此,Object 类是 Java 类层中的最高层类,是所有类的超类。换句话说,Java 中任何一个类都是它的子类。由于所有的类都是由 Object 类衍生出来的,所以 Object 类中的方法适用于所有类。

public class Person //当没有指定父类时,会默认 Object 类为其父类

{

    ...

}

上面的程序等价于:

public class Person extends Object

{

    ...

}

如果想引用你不知道的类型的对象,使用Object类是没有错的。请注意,父类引用变量可以引用子类对象,称为向上转换。下面举一个例子,有一个getObject()方法返回一个对象,但它可以是任何类型,如:Employee,Student等这样的类,我们可以使用Object类引用来引用该对象。 例如:

Object obj=getObject();//we don't know what object will be returned from this method

Object类为所有对象提供了一些常见的行为,如对象可以进行比较,对象可以克隆,对象可以通知等。

 

Object类的方法

Object类提供了许多方法。 它们如下:

 

Object类的常用方法有: toString()和equals()方法。

1.关于toString()方法

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

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

此方法是在打印对象时被调用的,下面有两个范例,一个是没复写toString()方法,另一个是复写了 toString()方法,读者可比较两者的区别。

package educoder;

public class TestToStringDemo1 {

    public static void main(String[] args) {

        Person p = new Person();

        System.out.println(p);

    }

}

class Person extends Object {

    String name = "张三";

    int age = 18;

}

输出结果: educoder.Person@7852e922

从上面的程序中可以发现,在打印对象p的时候实际上打印出的是一些无序的字符串,这样的字符串很少有人能看懂什么意思,之后可以再观察下面的范例,下面的范例复写了Object类中的 toString()方法。

package educoder;

public class TestToStringDemo2 {

    public static void main(String[] args) {

        Person p = new Person();

        System.out.println(p);

    }

}

class Person extends Object {

    String name = "张三";

    int age = 18;

    // 复写Object类中的toString()方法

    public String toString() {

        return "我是:" + this.name + ",今年:" + this.age + "岁";

    }

}

输出结果: 我是:张三,今年:18岁

与 TestToStringDemo1.java 程序相比,程序TestToStringDemo2.java 在 Person 类中明确复写了 toString()方法,这样在打印对象p的时候,实际上是去调用了 toString()方法,只是并没有明显的指明调用 toString()方法而已,此时第 6 行相当于:

System.out.println(p.toString());

2.关于equals()方法 

比较的是对象的引用是否指向同一块内存地址,一般情况下,比较两个对象时是比较它的值是否一致,那如何解决呢?思路

答案

package case1;

 

import java.util.Scanner;

 

public class ObjectTest {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int num1 = sc.nextInt();

        int num2 = sc.nextInt();

        // 在测试类中创建Demo类对象d1,传入输入值num1, d1调用toString方法并打印输出该值

        // 创建Demo类对象d2,同样传入输入值num1,打印判断d1和d2是否相等(实际是比较地址)

        /********* Begin *********/

        Demo d1 = new Demo(num1);

        System.out.println(d1.toString());

         Demo d2 = new Demo(num1);

         if(d1.equals(d2)){

             System.out.println("true");

         }else{

             System.out.println("false");

         }

        /********* End *********/

        // 创建Person类对象p,传入输入值num2,打印判断d1和p是否相等(实际是比较地址)

        /********* Begin *********/

        Person p = new Person(num2);

        if(d1.equals(p)){

            System.out.println("true");

        }else {

            System.out.println("false");

        }

        /********* End *********/

    }

}

 

class Demo {

    private int num;

 

    public Demo(int num) {

        this.num = num;

    }

 

    public boolean equals(Object obj) // Object obj = new Demo()

    {

        if (!(obj instanceof Demo)) // 判断obj是否和Demo是同类

            return false;

        Demo d = (Demo) obj; // 将父类的引用(Object)向下转换为子类(Demo)

        return this.num == d.num;

    }

 

    public String toString() {

        return "Demo:" + num; // 返回对象的值(每一个对象都有自己的特定的字符串)

    }

}

 

class Person {

    private int num;

 

    public Person(int num) {

        this.num = num;

    }

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
歌实践教学平台第一objectJava基础中的一个重要概念,ObjectJava中所有的父,即所有都直接或间接继承自ObjectObject中定义了一些通用的方法,如equals()、toString()、hashCode()等,这些方法可以被所有子继承和使用。在Java中,如果一个没有显式地继承其他,则默认继承Object。 在Java中,Object还有一些重要的方法,如: 1. equals(Object obj)方法:用于比较两个对象是否相等,如果相等则返回true,否则返回false。 2. hashCode()方法:返回对象的哈希码值,用于在哈希表中查找对象。 3. toString()方法:返回对象的字符串表示形式,通常用于调试和日志输出。 4. getClass()方法:返回对象的运行时。 下面是一个示例代码,演示了如何使用Object的一些方法: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (obj == this) { return true; } if (obj.getClass() != getClass()) { return false; } Person other = (Person) obj; return name.equals(other.name) && age == other.age; } @Override public int hashCode() { return Objects.hash(name, age); } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } } // 测试代码 Person p1 = new Person("Tom", 20); Person p2 = new Person("Tom", 20); System.out.println(p1.equals(p2)); // true System.out.println(p1.hashCode() == p2.hashCode()); // true System.out.println(p1.toString()); // Person{name='Tom', age=20} ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吓人的小恐龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值