Java 如何使用同一引用引用多个类
我需要向多个类发送相同的数据。我的教授给了我们一个半完整的驱动程序文件,他使用相同的引用引用了两个不同的类,这样您就可以在一个方法调用中向两个类发送相同的数据。但是,这会导致错误。我一直在努力使它工作,即使给他们不同的参考和调用方法两次,但仍然不起作用。它还表示在方法的签名中找不到符号“SortedStringListReferenceBased_solution”。请帮忙Java 如何使用同一引用引用多个类,java,Java,我需要向多个类发送相同的数据。我的教授给了我们一个半完整的驱动程序文件,他使用相同的引用引用了两个不同的类,这样您就可以在一个方法调用中向两个类发送相同的数据。但是,这会导致错误。我一直在努力使它工作,即使给他们不同的参考和调用方法两次,但仍然不起作用。它还表示在方法的签名中找不到符号“SortedStringListReferenceBased_solution”。请帮忙 public class SortedStringListDriver { public static void
public class SortedStringListDriver
{
public static void main(String [] args)
{
SortedStringListArrayBased myGroceryList = new SortedStringListArrayBased();
SortedStringListReferenceBased myGroceryList = new SortedStringListReferenceBased();
myGroceryList.add("milk");
myGroceryList.add("eggs");
myGroceryList.add("butter");
myGroceryList.add("pecans");
myGroceryList.add("apples");
myGroceryList.add("bread");
myGroceryList.add("chicken");
myGroceryList.add("black beans");
myGroceryList.add("rice");
myGroceryList.add("sausage");
myGroceryList.add("flour");
printList(myGroceryList);//print out original List
System.out.print("numItems for array based list is now: "+myGroceryList1.size()+"\n\n");
adding(myGroceryList, "juice");
removing(myGroceryList, "juice");
adding(myGroceryList, "banana");
removing(myGroceryList, "sausage");
removing(myGroceryList, "cheese");
}
public static void adding(SortedStringListReferenceBased_solution myList, String str)
{
System.out.println("Adding " + str + " ...");
myList.add(str); //add juice
printList(myList);
System.out.print("numItems for array based list is now: " + myList.size() + "\n\n");
}
public static void removing(SortedStringListReferenceBased_solution myList, String str)
{
System.out.println("Removing " + str + " ...");
myList.remove(str);
printList(myList);
System.out.print("numItems is now: " + myList.size() + "\n\n");
}
public static void printList(SortedStringListReferenceBased_solution myList)
{
//method prints a list, numbering the values, e.g, "0. milk" .... "4. juice".... etc.
for (int index = 0; index < myList.size(); index++)
{
System.out.printf("%2d. %s\n",index, (String) myList.get(index));
}
}
}
公共类SortedStringListDriver
{
公共静态void main(字符串[]args)
{
SortedStringListArrayBased myGroceryList=新建SortedStringListArrayBased();
SortedStringListReferenceBased myGroceryList=新建SortedStringListReferenceBased();
myGroceryList.添加(“牛奶”);
myGroceryList.添加(“鸡蛋”);
myGroceryList.添加(“黄油”);
myGroceryList.add(“山核桃”);
myGroceryList.添加(“苹果”);
myGroceryList.添加(“面包”);
myGroceryList.添加(“鸡肉”);
myGroceryList.add(“黑豆”);
myGroceryList.添加(“大米”);
myGroceryList.添加(“香肠”);
添加(“面粉”);
打印列表(myGroceryList);//打印出原始列表
System.out.print(“基于数组的列表的numItems现在是:“+myGroceryList1.size()+”\n\n”);
添加(myGroceryList,“果汁”);
移除(myGroceryList,“果汁”);
添加(myGroceryList,“香蕉”);
移除(myGroceryList,“香肠”);
移除(myGroceryList,“奶酪”);
}
公共静态空白添加(SortedStringListReferenceBased_解决方案myList,String str)
{
System.out.println(“添加“+str+”);
myList.add(str);//添加果汁
打印列表(myList);
System.out.print(“基于数组的列表的numItems现在是:“+myList.size()+”\n\n”);
}
公共静态无效删除(基于SortedStringListReferenceU解决方案myList、String str)
{
System.out.println(“删除“+str+”);
myList.remove(str);
打印列表(myList);
System.out.print(“numItems现在是:“+myList.size()+”\n\n”);
}
公共静态无效打印列表(SortedStringListReferenceBased_解决方案myList)
{
//方法打印一个列表,对值进行编号,例如,“0.牛奶”…“4.果汁”。
对于(int index=0;index
看了作业后,我认为这是需要的:
您需要设置一个变量,该变量可以是基于
SortedStringListArrayBased
或SortedStringListReferenceBased
。但是这两个都实现了SortedStringListInterface
,因此变量将被声明为SortedStringListInterface
。您可以将变量指定给其中一个
SortedStringListInterface myGroceryList;
if (iWantAnArray) // I have no idea how to determine this
myGroceryList = new SortedStringListArrayBased();
else
myGroceryList = new SortedStringListReferenceBased();
注意,当您将myGroceryList
声明为sortedString ListInterface
,这意味着无论是什么类,变量都可以引用实现该接口的任何对象。这可能就是你主题行中问题的答案
完成后,您可以添加您的项目:
myGroceryList.add("milk");
myGroceryList.add("eggs");
...
它将调用
SortedStringListArrayBased
的add
方法或SortedStringListReferenceBased
方法,具体取决于您将myGroceryList
设置为哪种对象。这就是多态性——它在运行时根据实际类选择实际发生的add
方法
此
add
调用(和其他调用)列表在您的程序中只应出现一次。但是如果你想做两次,每种列表一次,你可以把它放在一个主程序调用两次的方法中。或者,您可以使列表的类型依赖于args
中的参数,并运行该程序两次。我不知道教授想要什么。但是这一部分可以很容易地更改。基本上,UML图显示您有一个接口,然后有两个类实现该接口,箭头表示。一个接口让你说“嘿,实现这个接口的东西会有这些方法,我会在接口代码中留空”接口是一种通过实现类(es)方法来填充的方式。所以你的教授给了你这个界面,由你来决定每门课应该如何“添加”或“删除”一些东西?如果椅子实现了可移动界面,它应该如何移动?这取决于实现接口的类。如果实现它的类是“WheeledChair”,那么move()可能是“push the darn chair”,但是如果实现了可移动接口,“WoodLeggedChair”可能是“捡起它,这样你就不会刮地板了!”所以你需要决定在每个类中应该如何实现这些方法。这就是接口的要点——当您知道实现接口的东西可能需要以不同的方式处理数据时,定义一组空的方法或行为。通过这种方式,您可以确保实现这些方法,但将实现的详细信息留给实现类来处理,这些类现在可以工作了。这不完全是我想做的,但已经足够近了
public class SortedStringListDriver
{
public static void main(String [] args)
{
SortedStringListArrayBased myGroceryList1 = new SortedStringListArrayBased();
SortedStringListReferenceBased myGroceryList2 = new SortedStringListReferenceBased();
myGroceryList1.add("milk");
myGroceryList1.add("eggs");
myGroceryList1.add("butter");
myGroceryList1.add("pecans");
myGroceryList1.add("apples");
myGroceryList1.add("bread");
myGroceryList1.add("chicken");
myGroceryList1.add("black beans");
myGroceryList1.add("rice");
myGroceryList1.add("sausage");
myGroceryList1.add("flour");
myGroceryList2.add("milk");
myGroceryList2.add("eggs");
myGroceryList2.add("butter");
myGroceryList2.add("pecans");
myGroceryList2.add("apples");
myGroceryList2.add("bread");
myGroceryList2.add("chicken");
myGroceryList2.add("black beans");
myGroceryList2.add("rice");
myGroceryList2.add("sausage");
myGroceryList2.add("flour");
printList(myGroceryList1);
printList(myGroceryList2);//print out original List
System.out.print("numItems for array based list is now: " + myGroceryList1.size() + "\n");
System.out.print("numItems for referenced based list is now: " + myGroceryList2.size() + "\n\n");
adding(myGroceryList1, "juice");
adding(myGroceryList2, "juice");
removing(myGroceryList1, "juice");
removing(myGroceryList2, "juice");
adding(myGroceryList1, "banana");
adding(myGroceryList2, "banana");
removing(myGroceryList1, "sausage");
removing(myGroceryList2, "sausage");
removing(myGroceryList1, "cheese");
removing(myGroceryList2, "cheese");
}
public static void adding(SortedStringListInterface myList, String str)
{
System.out.println("Adding " + str + " ...");
myList.add(str); //add juice
printList(myList);
System.out.print("numItems for array based list is now: " + myList.size() + "\n\n");
}
public static void removing(SortedStringListInterface myList, String str)
{
System.out.println("Removing " + str + " ...");
myList.remove(str);
printList(myList);
System.out.print("numItems is now: " + myList.size() + "\n\n");
}
public static void printList(SortedStringListInterface myList)
{
//method prints a list, numbering the values, e.g, "0. milk" .... "4. juice".... etc.
for (int index = 0; index < myList.size(); index++)
{
System.out.printf("%2d. %s\n\n",index, (String) myList.get(index));
}
}
}
公共类SortedStringListDriver
{
公共静态void main(字符串[]args)
{
SortedStringListArrayBased myGroceryList1=新建SortedStringListArrayBased();
SortedStringListReferenceBased myGroceryList2=新建SortedStringListReferenceBased();
MyGroceryList 1.添加(“牛奶”);
MyGroceryList 1.添加(“鸡蛋”);
myGroceryList1.添加(“黄油”);
myGroceryList1.添加(“山核桃”);
MyGroceryList 1.添加(“苹果”);
MyGroceryList 1.添加(“面包”);
myGroceryList1.添加(“鸡肉”);
MyGroceryList 1.添加(“黑豆”);
MyGroceryList 1.添加(“大米”);
MyGroceryList 1.添加(“香肠”);
myGroceryList1.添加(“面粉”);
MyGroceryList 2.添加(“牛奶”);
MyGroceryList 2.添加(“鸡蛋”);