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

时间:2017-10-07 05:59:47

标签: java inheritance parent-child tostring

说我们有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 个答案:

答案 0 :(得分: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,因此当您将字符串传递给name的构造函数时,B字段会正确设置。