我有两个班级:
import android.cla;
public class CW {
public static void main(String [] args){
System.out.println(new cla());
}
}
public class Cl {
@Override
public String toString(){
return "LOL";
}
}
在第一个类中,我调用了对象toString()
方法,该方法已经覆盖并将其打印到控制台。它明确地返回“LOL”;
我有两个问题:
是否可以在实例化这样的(new cla()
)时返回数据,而不会覆盖对象toString()
方法;和
实例化这样的类(new cla()
)的正确术语是什么,没有声明如下:Object l = new cla()
感谢。请以正确的条款纠正我。
答案 0 :(得分:3)
1 - 不,不是。 “构造函数”是类的特殊方法,它始终返回类的对象实例。构造函数的重点是返回对象。所以不,它不能返回任何其他东西。
1a - System.out.println
调用toString
方法的原因是因为您要求它将该对象打印到屏幕上,而toString
方法是由println
方法选择的方法。 println
的作者(以及一般的Java语言)给出对象的字符串表示。
2 - 这种写作方式实际上并没有被称为任何东西。它只是一个表达式,您将其作为“实际参数”传递给println("a string")
方法。是的,它是一个实例化新对象的表达式,但它与Cl
没有区别。如果你真的想要,可以称之为匿名对象。
2a - (旧答案实际上没有回答你的问题,但我会保留在这里)这就是所谓的'使用较少派生的引用†到一个类'。请注意,您只能调用引用类型的方法,因此如果您在Object
类中添加了额外的方法,则无法通过{{1}}引用调用它们。查看Liskov substitution principle。
†'less derived'或'supertype'或'superclass'或'more general class'等...