我自学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() );
}
答案 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()方法。