当ArrayLists的引用变量“进入”System.out.println()时,下面的ArrayList成功打印其对象的字段。
输出:[Dal:Tigers,SMU:Tigers,Acadia:Axemen]
第二个ArrayList在其ArrayList引用“进入”System.out.println()...
时无法打印其对象的字段为什么呢?甚至知道可以使用ArrayList的引用变量上的输出方法打印ArrayList的成员,我感到很惊讶。第二个代码和第一个代码之间有什么区别?
USport课程:
import java.util.ArrayList;
class USport {
String school; // creates a field for String
String name; // creates a field for name
public USport( String s, String n) // initializes school and name
{school = s;
name = n;}
public String toString () // for use in output method; returns both
{return school + ":" + name;}
}
public class ArrayListDemo {
public static void main(String a[]) {
ArrayList <USport> v = new ArrayList <> ();
v.add( new USport ("Dal", "Tigers"));
v.add( new USport ("SMU", "Tigers"));
v.add( new USport ("Acadia", "Axemen"));
System.out.println(v);
}
}
城市类:
import java.util.ArrayList;
public class Cities {
private String pub;
private boolean pubHasDancing;
public Cities(String pub, boolean pubHasDancing){
this.pub = pub;
this.pubHasDancing = pubHasDancing;
}
public static void main(String[]args){
ArrayList <Cities> list2 = new ArrayList <> ();
list2.add(new Cities ("Joce McCartney", false));
list2.add(new Cities ("Paul McCartney", true));
System.out.println(list2); // <<<<<< This is the method I'm questioning
System.out.println(list2.get(1).pub);
System.out.println(list2.toString()); /** <<<< This output should be the same as println's output no */
}
}
答案 0 :(得分:3)
因为USport
声明了执行打印的toString()
方法,而Cities
没有。
答案 1 :(得分:2)
不同之处在于:在第一个类中,您覆盖toString()
方法。但是,你在第二堂课中没有做到这一点。 System.out.println()
将调用ArrayList
的{{1}}方法,该方法将调用AbstractCollection
类的toString
方法。因此,您需要覆盖第二类的toString()
方法才能获得正确的输出。
toString()