-1

所以我知道如何使用它,它是如何工作的。这个问题在现实生活场景中有什么意义。toString()想象一下没有覆盖的创建类。那么,如果您无法正确显示该课程,那该课程有什么意义呢?

请尽量不要解释构造函数链接的工作原理或类似的东西。我知道它是如何工作的。我想知道在现实生活中是否有人这样做,因为没有toString()覆盖我看不到重点

   public class ConstructorChaining {

        String a;
        int b;
        int c;
        int d;
        int e;

        public ConstructorChaining() {
            this("");
        }


        public ConstructorChaining(String a) {
            this(a, 0);

        }

        public ConstructorChaining(String a, int b) {
            this(a, b, 0);

        }

        public ConstructorChaining(String a, int b, int c) {
            this(a, b, c, 0);

        }

        public ConstructorChaining(String a, int b, int c, int d) {
            this(a, b, c, d, 0);

        }

        public ConstructorChaining(String a, int b, int c, int d, int e) {
            this.a = a;
            this.b = b;
            this.c = c;
            this.d = d;
            this.e = e;
        }

    }

所以想象我创建了一个对象

ConstructorChaining constructorChaining=new ConstructorChaining("name");

并试图打印它

System.out.println(constructorChaining);

我如何实现toString()这个

4

2 回答 2

1

只需执行此操作,使用根据您调用的构造函数设置不同的字段:

public class ConstructorChaining {

   String a;
   int b;
  //This value is different for each constructor, so you can control your
  //toString implementation
  String asString;

public ConstructorChaining() {
            this("");
        }


        public ConstructorChaining(String a) {
            this(a, 0, a + "");

        }

        public ConstructorChaining(String a, int b) {
            this(a, b, 0, a + "" + b);

        }

        private ConstructorChaining(String a, int b, String asString) {
            this.a = a;
            this.b = b;
            this.asString = asString;
        }

@Override
public String toString() {
  return "Overriden toString, asString = " + asString;
}

于 2020-04-27T19:59:55.613 回答
1
 public class ConstructorChaining {

    String a;
    int b;
    int c;
    int d;
    int e;

    public ConstructorChaining() {
        this("");
    }


    public ConstructorChaining(String a) {
        this(a, 0);

    }

    public ConstructorChaining(String a, int b) {
        this(a, b, 0);

    }

    public ConstructorChaining(String a, int b, int c) {
        this(a, b, c, 0);

    }

    public ConstructorChaining(String a, int b, int c, int d) {
        this(a, b, c, d, 0);

    }

    public ConstructorChaining(String a, int b, int c, int d, int e) {
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
        this.e = e;
    }

    @Override 
    public String toString() {
        return "ConstructorChaining={a=" + a + ", b=" + b + ", c=" + c + ", d=" + d + ", e=" + e;
    }
}

看看你的朋友告诉你什么,承包商和 toString 重写方法之间没有关系。

所有原始类型都已初始化为 0,因此您无需关心值是否存在。

于 2020-04-27T20:03:39.557 回答