当前位置: 首页 > 面试题库 >

覆盖toString时,更好地使用getter方法还是直接访问私有字段?

訾俊名
2023-03-14
问题内容

我已经看过两种方法都使用过,但从未听说由于某种特殊原因,一种方法比另一种方法更可取。

public String toString() {
  return this.field1 + " " + this.field2;
}

public String toString() {
  return getField1() + " " + getField2();
}

我在示例中使用String串联来保持代码简短。


问题答案:

如果有吸气剂,请使用它们!

也许有一天,您需要更改代码,以便获取程序不仅可以返回字段值,还可以执行其他操作或以其他方式创建结果。这样一来,您会更高兴地发现,始终如一地使用吸气剂。

但是像往常一样,我的建议中有一些例外情况-如果允许覆盖getter方法,那么您对toString()方法有什么期望,您希望它使用class字段还是使用-可能覆盖-getter方法的结果。

因此,像往常一样,这要视情况而定,但是除非我有充分的理由直接访问字段,否则我将使用吸气剂。



 类似资料:
  • 我这样做对吗?我生成了toString()。

  • 问题内容: 这个想法有些含糊不清,我需要澄清。 我的问题是使用此代码时: 输出为。 这是因为main函数与method在同一类中,还是由于重写? 我已经在书中读过这个想法,当我将该函数放在另一个类中时,会出现编译器错误。 问题答案: 您不能覆盖方法。如果投射到,则看不到。您 可以 覆盖一个方法,但这不是您要在此处执行的操作(是的,在这里,如果将移至,则会得到另一个方法。我建议您在打算覆盖时注解,

  • 问题内容: 在Java中重写私有方法是无效的,因为父类的私有方法是“自动最终的,并且对派生类是隐藏的”。我的问题主要是学术上的。 不允许父级的私有方法被“重写”(即,在子类中以相同的签名独立实现),这是否违反封装规范?根据封装的原理,子类不能访问或继承父级的私有方法。它是隐藏的。 那么,为什么应该限制子类实现自己的具有相同名称/签名的方法呢?这是否有一个良好的理论基础,还是仅仅是某种务实的解决方案

  • 问题内容: 考虑以下代码: 现在,更改方法的可见性,我得到: (for ,for ) (看起来像)。 我期望所有东西都像声明时一样。但是,尽管和本质上是同一件事,但根据in 和的可见性,它们会产生不同的结果。为什么会这样? 问题答案: 继承/覆盖私有方法 在PHP中,子类中的方法(包括私有方法)为: 复制;保留原始功能的范围。 已替换(如果需要,则为“覆盖”)。 您可以使用以下代码查看此内容: 现

  • 问题内容: 我试图摆脱Java继承的束缚,并且了解到,当重写子类中的方法(和隐藏字段)时,仍然可以使用“ super”关键字从父类中访问它们。 我想知道的是,是否应将“ super”关键字用于非重写方法? 有什么区别(对于非覆盖方法/非隐藏字段)? 我在下面整理了一个例子。 和 具体来说,鉴于尚未被覆盖,应使用或?。 我想知道是否应该在访问超类的字段或方法的所有实例中使用super(以在代码中显示

  • 注意:这里有几个人引用的解决方案不适用于我的问题。。。 我有一个java。sql。要在getter中格式化为字符串的时间戳字段。我在课程开始时使用Lombok@Data。但是,当我用自己的getter覆盖Lombok的getter(格式化时间戳)时,字段总是空的。我在文档中没有看到任何东西来解释这种行为。 这段代码将结算日期作为时间戳提供给我: 这个代码块给了我一个NPE,因为setementDa