隐式调用方法

时间:2016-03-15 08:56:16

标签: java

我自学java,我被困在关于implicitly call another method的点上 我无法弄明白how dealCard method call ToString method implicitly   卡洗牌和交易模拟。

 public class Card 
    {
       private String face;
       private String suit; 

       public String toString() 
       { 
          return face + " of " + suit;
       } // end method toString
}

// DeckOfCards类代表一副扑克牌。

import java.util.Random;

public class DeckOfCards
{
   public Card dealCard()
   {
      // determine whether Cards remain to be dealt
      if ( currentCard < deck.length )
         return deck[ currentCard++ ];
      else        
         return null;
   } 
} 

//执行应用程序

public class DeckOfCardsTest
{
  public static void main( String[] args )
   {
      DeckOfCards myDeckOfCards = new DeckOfCards();
      myDeckOfCards.shuffle(); // place Cards in random order

      // print all 52 Cards in the order in which they are dealt
      for ( int i = 1; i <= 52; i++ )
      {
         // dealCard method implicitly call ToString method 
         System.out.printf( "%-19s", myDeckOfCards.dealCard() );
      } 

3 个答案:

答案 0 :(得分:3)

dealCard方法不会隐式调用toString。它只是从您的套牌中返回一张卡片。

toString()的隐式调用是通过您从printf方法调用的main方法完成的:

System.out.printf( "%-19s", myDeckOfCards.dealCard() );

每当你将类型Object传递给printf方法并且它不是printf方法知道的类型(例如,它知道数字)时,它就会使用{{ 1}}获取对象的String表示的方法。

答案 1 :(得分:1)

  

System.out.printf(“%-19s”,myDeckOfCards.dealCard());

您正在打印字符串(%s),因此Java将查找toString()类的Card方法。

toString()方法将返回表示对象的字符串。 如果你没有覆盖这个方法(Object类的一部分),你会看到一个奇怪的字符串,它是Java在你的对象默认给出的表示

答案 2 :(得分:0)

Println(Object obj)方法尝试将该对象转换为String,如下所示  String s = String.valueOf(x);

String.valueof(object)将检查对象是否为null,print null,否则将调用Object.toString()方法。