3

我有一个关于 Java 中 toString() 的查询,当我创建一个 toString 方法时,我被教导要这样做,例如:

  public String toString(){

    return....
  }

我想知道我可以将其作为无返回值方法来执行,例如:

  public void toString(){

  System.out.println(....);
  }
4

4 回答 4

4

你不能。您最终会遇到编译时错误。The return type is incompatible, 因为它继承自 Object#toString()

你可以喜欢

public void toMyString(){

 }  

因为它新的实例方法属于当前类:)

编辑(特定场景):

类型void

public void printOneMessage(){
System.out.println("printed .That's it");
}

类型return

public boolean printOneMessageAndLetMeknow(){
 // some  logic weather to print or not
 System.out.println("printed .That's it");

 return true;
}

另一个为return

public MyObjectType setSomeThingToObjectAndGiveMeBack(MyObjectType receiveObj){
  receiveObj.setSomeProperty(someVal);

 return receiveObj; //returning modified
}

这些只是举例。

于 2013-10-09T15:33:46.767 回答
2

您的类中的方法toString()正在覆盖toString()其父类的方法,所以不,您不能将覆盖方法的返回类型更改为不继承自原始返回类型的内容。

于 2013-10-09T15:37:01.793 回答
2

String toString()继承自Object类。定义 avoid toString()会引发编译时错误,因为它是非法覆盖,因为方法签名匹配但返回类型不兼容(相同或协变)。


即使您不提供toString()类的实现,您仍然可以toString()在其对象上调用。这是因为默认情况下,每个类都从它扩展Object并继承toString()(除其他外)的基本实现。

当您定义toString()自己的方法时,您基本上是在执行 OOP 中已知的方法覆盖,即提供您自己的方法实现来取代您从任何父类继承的方法实现。

合法的方法覆盖要求方法签名与您尝试覆盖的方法签名相匹配,并规定返回类型必须相同或协变,即您的类型必须可分配给原始返回类型。

于 2013-10-09T15:37:31.777 回答
0

对于 int、String 和 boolean 类型的任何方法,您都必须使用 return。如果是 void 方法,则不需要使用 return。

于 2013-10-09T15:59:10.450 回答