实例化一个类toString术语

时间:2012-01-19 17:49:04

标签: java object

我有两个班级:

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()

感谢。请以正确的条款纠正我。

1 个答案:

答案 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'等...