【问题标题】:How to override?如何覆盖?
【发布时间】:2013-08-06 21:27:29
【问题描述】:
package wr3;

public class Person {
    private String name;
    private String id;
    private String bday;
    private String address;

    public String getName(){
        return name;
    }

    public String getID(){
        return id;
    }

    public String getBday(){
        return bday;
    }

    public String getAdd(){
        return address;
    }


    public void equals(){
        super.equals(id);
    }
    @Override
    public String toString(){
        return(name + bday + id + address);
    }
}

package wr3;

public class Test {
    public static void main(String[] args){
        String name = "Claude Rhay Torre";
        String name2 = "Bea Señerpida";
        String id = "10302993";
        String id2 = "11102825";   
        String bday = "06/201993";
        String bday2 = "11/17/1994";
        String address = "BF Better Living Basak LLC";
        String address2 = "F Martyr St Poblacion LLC";
        boolean eq;

        System.out.println(name.toString());
        System.out.println(id.toString());
        System.out.println(bday.toString());
        System.out.println(address.toString());
        System.out.println();

        System.out.println(name2.toString());
        System.out.println(id2.toString());
        System.out.println(bday2.toString());
        System.out.println(address2.toString());


        eq = id.equals(id2);
        System.out.println("\nDo they have the same ID number? " + eq );

    }
}

所以我有这个代码。 我也有这个问题。

  • A.对象类
    1. 研究 java.lang 包中的 Object 类。
    2. 了解它的所有方法。
    3. 创建具有以下要求的 Person 类:
      一种。实现封装
      湾。这些字段是:姓名、ID(身份证号)、生日和 地址。
      C。一种将覆盖 Object 类的 equals( ) 方法的方法。 如果两个人具有相同的 id,则他们是相等的。
      d。将覆盖 Object 的 toString( ) 方法的方法 班级。它显示一个人的 id、姓名、生日和地址 目的。
    4. 创建一个测试类来创建 Person 对象并适当地调用 equals( ) 和 toString( ) 方法。

我的问题是,这两个类甚至相关吗? 我的意思是,我的 Test 类 上调用的 "toString" 和 "equal" 方法是我的 Person 类 中的方法吗?还是 Object 类的 "toString" 和 "equal" 方法?

如何覆盖 Object 类中的 equalstoString 类?

【问题讨论】:

  • 您的 Test 类不会创建 Person 对象...
  • 执行有问题的方法不会立即回答这个问题吗?您可以通过复制签名来覆盖方法。
  • @DaveNewton 我不明白...你能详细解释一下吗? :(
  • @ClaudeRhay 在你的类中创建一个名为public boolean equals(Object o) 的方法;你已经覆盖了equals。在你的类中创建一个名为public String toString() 的方法;你已经覆盖了toString

标签: java overriding


【解决方案1】:

当从另一个类继承一个方法时(例如从Object 继承的public String toString()),你所要做的就是在你的类中定义你自己的public String toString() 来覆盖它。您实际上已经在代码中做到了这一点,并且您已经成功地为 Person 的所有实例覆盖了 toString()

您没有看到预期结果的原因是您调用的toString()equals() 方法来自String 类,而不是来自Person 类。这是因为您在 String 对象上调用它们,而不是在 Person 对象上调用它们 - 并且这两个类在层次结构上没有关联(除了它们共同的 Object 祖先)。

您的Test 可能是这样的,而不是:

    Person p1 = new Person();
    p1.name = "Claude Rhay Torre";
    p1.id = "10302993";
    p1.bday = "06/20/1993";
    p1.address = "BF Better Living Basak LLC";

    Person p2 = new Person();
    p2.name2 = "Bea Señerpida";
    p2.id2 = "11102825";   
    p2.bday2 = "11/17/1994";
    p2.address2 = "F Martyr St Poblacion LLC";

    System.out.println(p1.toString());
    System.out.println(p2.toString());

【讨论】:

  • 您能告诉我如何进行继承吗?比如,重做我的代码? :/我似乎不明白。我怎样才能让它们相关联?
  • @ClaudeRhay 由于种种原因,String 被 Java 的设计者标记为final,这意味着你根本无法创建String 的子类。
  • 哦,好吧,我现在似乎明白了。那我怎样才能让它们继承我的 Person 类呢?
  • @ClaudeRhay 您不必继承任何东西。您所要做的只是在您的Test 中创建Person 实例(使用new Person())并将其保存在Person 类型的变量中(而不是String)。然后使用您在代码中已有的值设置这些Person 实例的属性,并在Person 类型变量上调用toString()
  • 噢噢噢噢噢噢!现在我懂了!哈哈哈哈哈哈哈!天哪,我真是个菜鸟。 :))))))) 我的 Person 类缺少方法吗?喜欢设置什么?或者也许是构造函数?你能给我举个我的测试课的例子吗?
猜你喜欢
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 2015-09-09
  • 2012-12-17
  • 2020-07-28
  • 2012-02-25
  • 2015-05-02
  • 2012-11-13
相关资源
最近更新 更多