【问题标题】:Calling a super toString() method but using current class' variables调用超级 toString() 方法但使用当前类的变量
【发布时间】:2017-10-07 05:59:46
【问题描述】:

假设我们有 2 个类:

public class A {

    private String name = "A";

    public String toString()
    {
        return (name + "some random text");
    }
}

public class B extends A{

    private String name = "B";
    public String toString()
    {
        return (super.toString());
    }
}

当我尝试在我的驱动程序类中打印 B.toString() 时,它仍然会打印 A 类的名称而不是 B 类的名称。如何更改它以便它使用 B 类的变量名?

【问题讨论】:

  • 1.删除private String name = "B"; 2. 在类A上添加一个构造函数来设置名称。 3. 在 B 类中添加一个构造函数,该构造函数调用超级构造函数,并将“B”作为 name 的值传递......原因:调用 super.toString() 将使用 A 类中定义为“A”的 name 变量

标签: java inheritance parent-child tostring


【解决方案1】:

您可以通过使用构造函数来做到这一点 -

public class HelloWorld {

  public static void main(String[] args) {
     A a = new A("A String");
     B b = new B("B String");
     System.out.println(a.toString()); // A String some random text
     System.out.println(b.toString()); // B String some random text
   }
}

class A {
  protected String name;

  A(String name) {
    this.name = name;
  }

  public String toString() {
    return name + " some random text";
  }
}

class B extends A {

  B(String name) {
    super(name);
  }

  @Override
  public String toString() {
    return (super.toString());
  }

}

因为B 继承自A,所以当您将字符串传递给B 的构造函数时,name 字段设置正确。

【讨论】:

  • 问题是,我已经有一个构造函数,它接受其他没有名称的参数,并且我的类 A 和 B 中的变量名称已经预先确定,我不知道我是否正在够清楚..
猜你喜欢
  • 2011-04-20
  • 2017-01-22
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
相关资源
最近更新 更多