我正在學習 Java 并遵循這樣的教程:
package segovia.java.learn;
import java.util.ArrayList;
public class GroceryList {
private ArrayList<String> groceryList = new ArrayList<String>();
public void addGroceryItem(String item) {
groceryList.add(item);
}
public void printGroceryList() {
System.out.println("You have " groceryList.size() " items in your grocery list.");
for (int i=0; i < groceryList.size(); i ) {
System.out.println((i 1) ". " groceryList.get(i));
}
}
public int getLength(){
return groceryList.size();
}
}
package segovia.java.learn;
public class Main {
public static void main(String[] args) {
GroceryList myGroceries = new GroceryList();
myGroceries.addGroceryItem("apple");
myGroceries.addGroceryItem("orange");
myGroceries.addGroceryItem("pork");
myGroceries.addGroceryItem("beef");
myGroceries.printGroceryList();
System.out.println(myGroceries.getLength());
}
}
效果很好。但是,我認為既然myGroceries是一個ArrayList,那么它應該有.size()方法。所以我加了一行
System.out.println(myGroceries.size());
但 IntelliJ 告訴我它不起作用。所以我想也許我應該使用繼承,所以我改為
public class GroceryList extends ArrayList {
現在該.size()方法有效,但它給了我錯誤的值。
最終代碼是這樣的:
package segovia.java.learn;
import java.util.ArrayList;
public class GroceryList extends ArrayList{
private ArrayList<String> groceryList = new ArrayList<String>();
public void addGroceryItem(String item) {
groceryList.add(item);
}
public void printGroceryList() {
System.out.println("You have " groceryList.size() " items in your grocery list.");
for (int i=0; i < groceryList.size(); i ) {
System.out.println((i 1) ". " groceryList.get(i));
}
}
public int getLength(){
return groceryList.size();
}
}
package segovia.java.learn;
public class Main {
public static void main(String[] args) {
GroceryList myGroceries = new GroceryList();
myGroceries.addGroceryItem("apple");
myGroceries.addGroceryItem("orange");
myGroceries.addGroceryItem("pork");
myGroceries.addGroceryItem("beef");
myGroceries.printGroceryList();
System.out.println(myGroceries.getLength());
System.out.println(myGroceries.size());
}
}
并且getLenth()給了我4,這是正確的,而.size()給我0,這顯然是錯誤的。

誰能幫我理解為什么代碼會這樣作業?我猜這與類繼承有關,但不確定。
uj5u.com熱心網友回復:
我認為對繼承與組合存在誤解。在這種情況下,在您添加extends ArrayList到之前GroceryList,您GroceryList 有一個串列。這就是為什么.size()沒有處理它,因為GroceryList您定義的沒有size方法。它確實有一個名為的串列groceryList。這就是為什么在你之后addGroceryItem,該getLength方法可以正常作業。它的大小為groceryList.
添加后extends ArrayList,GroceryList現在是一個ArrayList,這就是為什么它size現在有一個方法。但它與groceryList. 因此,獲得myGroceries, after的大小addGroceryItem不會為您提供預期的大小。因為你從來沒有在ArrayListthat is 中添加任何東西myGroceries。您只向groceryList中的欄位添加了內容myGroceries。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/398265.html
