2012-01-19 45 views
0

我有两个类:一个类实例化,术语的toString

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()方法,它一直重写并打印到安慰。它显然返回“大声笑”;

我有两个问题:

  • 是否有可能同时没有覆盖的对象toString()方法实例像这样(new cla())返回的数据;和

  • 什么是适当的期限实例类像这样(new cla()),这还没有类似的声明:Object l = new cla()

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

回答

3

1 - 不是。 '构造函数'是类中的一个特殊方法,它总是返回类的对象实例。构造函数的要点是返回对象。所以不,它不能返回任何其他东西。

1A - 这System.out.println调用toString方法的原因是因为你要求它打印出该对象到屏幕上,和toString方法是通过println作者选择的方法(和一般的Java语言)给出对象的字符串表示。

2 - 这种写作方式并不真正叫做什么。这只是一个表达式,您将其作为'实际参数'传递给println方法。确实,这是一个表达式,用于实例化一个新对象,但它与println("a string")没有什么不同。如果你真的想,你可以称它为匿名对象。

2a - (旧的答案,实际上并没有回答你的问题,但我会保留在这里)这就是所谓的“使用派生参考†少于一个班级”。请注意,您只能调用引用类型的方法,因此如果您向Cl课程中添加了其他方法,则无法从Object引用中调用它们。看看Liskov substitution principle

†'少派生'或'超类'或'超类'或'更普遍类别'等...