我在Java中查询过toString(),当我创建一个toString方法时,我被教导要做,例如:
public String toString(){
return....
}
我想知道我可以将其作为无返回值方法,例如:
public void toString(){
System.out.println(....);
}
答案 0 :(得分: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
}
这些仅仅是例如。
答案 1 :(得分:2)
您的类中的toString()
方法会覆盖其父类的toString()
方法,所以不,您不能将重写方法的返回类型更改为不从原始返回值继承的方法类型。
答案 2 :(得分:2)
String toString()
继承自Object
类。定义void toString()
会抛出编译时错误,因为它是非法覆盖,因为方法签名匹配但返回类型不兼容(相同或共变)。
<小时/> 即使您没有为类提供
toString()
实现,您仍然可以在其对象上调用toString()
。这是因为默认情况下每个类都会扩展Object
并从中继承toString()
(以及其他内容)的基本实现。
当你定义一个自己的toString()
方法时,你基本上就是在OOP中已知的方法覆盖,即提供你自己的方法实现,取代你继承的方法。任何你的父类。
合法方法覆盖要求方法签名与您尝试覆盖的方法签名相匹配,并且规定返回类型必须相同或共变,即您的类型必须是可分配的到原始的返回类型。
答案 3 :(得分:0)
您必须对int,String和boolean类型的任何方法使用return。如果它是一个void方法,那么你不需要使用return。