调用超级 toString() 方法但使用当前 class' 变量

Calling a super toString() method but using current class' variables

假设我们有 2 个 classes:

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());
    }
}

当我试图在我的驱动程序 class 中打印 B.toString() 时,它仍然会打印 class A 中的名称而不是 class B 中的名称。我怎样才能改变它,以便它使用 class B 中的变量名?

您可以通过使用构造函数来实现 -

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 字段设置正确。