
初学者求教:java中重写方法 Arrays.toString() 的疑惑
我写了一个扑克牌的程序(card),它有两个类card和player;这两个类都重写了toString()方法.card中:{privateintsuit;//花色pri...
我写了一个扑克牌的程序(card),它有两个类 card 和 player;这两个类都重写了 toString()方法.
card中:
{
private int suit;//花色
private int rank;// 点数
public String toString() {return SUIT_NAMES[suit] + RANK_NAMES[rank];}
}
player中
{
private int id;
private String name;
private Card[] cards = {};
public String toString() {return id + " " + name + " " + Arrays.toString(cards);}
}
主方法中经过洗牌发牌后输出了一下:
//cards和players 都是数组
System.out.println(cards[0].toString());
System.out.println(cards.toString());
System.out.println(Arrays.toString(cards));
System.out.println(players[0].toString());
System.out.println(players.toString());
System.out.println(Arrays.toString(players));
输出结果如下:
问题来了,还很多:
1.第一行和第三行调用的难道不是同一个toString()方法么?类似第四和第六行
重写时 card类中toString()中隐含的参数是card还是card[]?到底是不是数组?
或者说card类型的 数组或废数组 都可以调用toString?
2.第四和第六行中players为什么可以调用Card类中重写的toString()方法?
4.为什么第二行和第五行能够调用toString方法?
5: 第二行和第五行看出,明显不能正常输出,Arrays中到底是怎么实现的重写的?
代码没法添加,实在没办法,如有需要可以进askquestion001@163.com,密码password
邮箱里有 展开
card中:
{
private int suit;//花色
private int rank;// 点数
public String toString() {return SUIT_NAMES[suit] + RANK_NAMES[rank];}
}
player中
{
private int id;
private String name;
private Card[] cards = {};
public String toString() {return id + " " + name + " " + Arrays.toString(cards);}
}
主方法中经过洗牌发牌后输出了一下:
//cards和players 都是数组
System.out.println(cards[0].toString());
System.out.println(cards.toString());
System.out.println(Arrays.toString(cards));
System.out.println(players[0].toString());
System.out.println(players.toString());
System.out.println(Arrays.toString(players));
输出结果如下:
问题来了,还很多:
1.第一行和第三行调用的难道不是同一个toString()方法么?类似第四和第六行
重写时 card类中toString()中隐含的参数是card还是card[]?到底是不是数组?
或者说card类型的 数组或废数组 都可以调用toString?
2.第四和第六行中players为什么可以调用Card类中重写的toString()方法?
4.为什么第二行和第五行能够调用toString方法?
5: 第二行和第五行看出,明显不能正常输出,Arrays中到底是怎么实现的重写的?
代码没法添加,实在没办法,如有需要可以进askquestion001@163.com,密码password
邮箱里有 展开
展开全部
Card[] cards = new Card[54]; // 这是一个数组,是一个普通对象。
Player[] players = new Player[3]; // 这是一个数组,是一个普通对象。
第一行,调用了数组 cards 上索引为 0 的元素的 toString 方法,对应于 Card 类的 toString 方法。
第二行,调用了数组 cards 的 toString 方法,对应于 Card[] 类的 toString 方法,继承自 Object 类。
第三行,调用了 Arrays 类的 toString 方法,传入参数是数组 cards ,具体可查找该方法的源码。
第四行,调用了数组 players 上索引为 0 的元素的 toString 方法,对应于 Player 类的 toString 方法。
第五行,调用了数组 players 的 toString 方法,对应于 Player[] 类的 toString 方法,继承自 Object 类。
第六行,调用了 Arrays 类的 toString 方法,传入参数是数组 players ,具体可查找该方法的源码。
简单说一下 Arrays.toString() ,它返回是由数组内所有元素的字符串化(toString)合并而成的字符串对象。
因此:
1. 不是同一个 toString 方法,任何对象都可调用自身的 toString 方法。
2. 因为 Player 类的 toString 方法内曾调用了“ Arrays.toString(cards) ”。
4. 任何对象都可调用自身的 toString 方法,数组是对象。
5. 数组是对象,一样有对应的类型,其类型一样继承自 Object 类,继承了 toString 方法。
最后,有任何疑问请追问。
Player[] players = new Player[3]; // 这是一个数组,是一个普通对象。
第一行,调用了数组 cards 上索引为 0 的元素的 toString 方法,对应于 Card 类的 toString 方法。
第二行,调用了数组 cards 的 toString 方法,对应于 Card[] 类的 toString 方法,继承自 Object 类。
第三行,调用了 Arrays 类的 toString 方法,传入参数是数组 cards ,具体可查找该方法的源码。
第四行,调用了数组 players 上索引为 0 的元素的 toString 方法,对应于 Player 类的 toString 方法。
第五行,调用了数组 players 的 toString 方法,对应于 Player[] 类的 toString 方法,继承自 Object 类。
第六行,调用了 Arrays 类的 toString 方法,传入参数是数组 players ,具体可查找该方法的源码。
简单说一下 Arrays.toString() ,它返回是由数组内所有元素的字符串化(toString)合并而成的字符串对象。
因此:
1. 不是同一个 toString 方法,任何对象都可调用自身的 toString 方法。
2. 因为 Player 类的 toString 方法内曾调用了“ Arrays.toString(cards) ”。
4. 任何对象都可调用自身的 toString 方法,数组是对象。
5. 数组是对象,一样有对应的类型,其类型一样继承自 Object 类,继承了 toString 方法。
最后,有任何疑问请追问。
展开全部
第一个问题
这两个toString方法不是同一个。
cards是数组。cards[]这就是数组中的一个元素,就是card数的单一实例。
第二个问题
你重写了toString方法。那么你调用时,就会执行你重写的方法。不然的话,就会调用object中的toString方法
第四个问题
2,5调用的是object中的toString方法
第五个问题
Arrays 类就是在遍历你传进去的数组,调用的是你数组元素的toString方法。
这两个toString方法不是同一个。
cards是数组。cards[]这就是数组中的一个元素,就是card数的单一实例。
第二个问题
你重写了toString方法。那么你调用时,就会执行你重写的方法。不然的话,就会调用object中的toString方法
第四个问题
2,5调用的是object中的toString方法
第五个问题
Arrays 类就是在遍历你传进去的数组,调用的是你数组元素的toString方法。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询