我可以在不使用该点运算符的情况下调用方法

时间:2013-09-07 13:29:27

标签: java

我在很多网站上搜索过,据他们说答案是否定的, 为什么Java中的这个prog在没有点运算符的情况下调用这个方法?

class A
{

    public String toString()
    {
          return "Hello";
    }

    public static void main(String ar[])
    {
          A a=new A();
          System.out.println(a);  
    }
}

4 个答案:

答案 0 :(得分:5)

您已覆盖toString的{​​{1}}方法。所有Java类都隐式扩展Object

Read the documentation,虽然这与你的问题有点无关。见下文原因。


You may want to see how Object behaves

  

打印一个对象,然后终止该行。此方法首先调用String.valueOf(x)来获取打印对象的字符串值,然后表现为调用print(String)然后调用println()。


从那里,你会想知道System.out.println(java.lang.Object)做了什么:

  

退货
  如果参数为null,则字符串等于“null”;否则,返回obj.toString()的值。

答案 1 :(得分:3)

println方法中,它将此内容写入输出流:

a == null ? "null" : a.toString()

答案 2 :(得分:0)

假设您询问如何在没有“。”的情况下调用方法。 因为在这种情况下a.toString()被隐式地称为

这种行为有点类似于:

Class A{
  void doSomething(){}

  void doAnother(){
  //both are leagal 
   doSomething();    //implicitly this.doSomething()
   this.doSomething();
  }

}

答案 3 :(得分:0)

当你在任何对象引用上调用sysout时,调用toString方法

 System.out.println(a); 

由于您已重写此方法以返回hello,因此程序会打印hello而不调用任何点运算符。