Inheritance Don';我不明白如何从子类重写父函数
我有一个问题,我被困在上面。我有一个菜单驱动的计算器。我的计算器类包含displayMenu()方法;看起来像Inheritance Don';我不明白如何从子类重写父函数,inheritance,polymorphism,parent-child,subclass,Inheritance,Polymorphism,Parent Child,Subclass,我有一个问题,我被困在上面。我有一个菜单驱动的计算器。我的计算器类包含displayMenu()方法;看起来像 public static int displayMenu(){ Scanner input=new Scanner(System.in); int choice=0; do{ System.out.println("1.Add"); System.out.println("2.Subtract"); System.out.print
public static int displayMenu(){
Scanner input=new Scanner(System.in);
int choice=0;
do{
System.out.println("1.Add");
System.out.println("2.Subtract");
System.out.println("3.Multiply");
System.out.println("4.Divide");
System.out.println("5.Clear");
System.out.println("6.Quit");
System.out.println("What would you like to do?");
}while(!input.hasNextInt());
choice=input.nextInt();
return choice;
}
我被要求创建一个名为ScientificMemCalc的子类。子类应该使用继承的能力向我的菜单添加新选项。新的打印输出应该如下所示
菜单
1.添加
2.减去
3.倍增
4.分
5.权力
6.对数
7.清楚的
8.退出
你想做什么
我知道从什么开始
public class ScientificMemCalc extends MC{
}
但是我不明白如何重写displayMenu()函数来显示新选项。我想,我知道如何为新选项添加功能,但如何在不重写子类中的整个方法的情况下更改打印输出?尝试将显示的内容(即菜单项字符串列表)与实际显示它们的代码分开 在您编写的代码中,菜单项字符串列表被
硬编码到显示代码中,您可以将其视为对System.out.println
函数的调用
System.out.println("1. ...");
System.out.println("2. ...");
除了修改调用System.out.println
的代码外,无法向列表中添加其他项
您需要做的是将菜单项(字符串列表)存储在某些数据结构中(例如数组
,列表
,或映射
)。然后使用一些显示代码从数据结构中读取项目,并使用System.out.println()
显示它们
您将创建:
存储菜单项字符串的数据结构。你有很多选择:数组
,列表
,地图
一个函数,用于读取已创建的数据结构并将菜单项打印到屏幕上
比较
System.out.println("1. menu item choice1");
与:
现在,您可以将内容添加到菜单项数组中,它们将自动打印在for循环中
class MC {
protected String[] menuitems = new String[]{"1. menu item choice1", "2. menu item choice2"};
public void displayMenu() {
for(String item : menuitems) System.out.println(item);
}
}
现在,如果您将MC子类化,则可以更改menuitems。displayMenu()
将显示您所做的更改
您可能还需要考虑:
接受菜单项字符串并将其添加到数据结构中的函数
读取用户输入的函数
将菜单项映射到实现它们的实际函数的另一种数据结构李>
最后一个可能实际上是存储菜单项的相同数据结构。实际上,您可能需要考虑如何映射菜单项字符串、用户输入(int)和正在调用的函数 如果你不能触摸MC,那就只能重写整个方法。你正在描述一种叫做“单一责任原则”的东西,它说,“一个方法应该只有一个改变的理由。”user3342994的displayMenu()函数至少有三个改变的理由:改变菜单格式,要更改菜单内容,请更改用户与菜单交互的方式。
class MC {
protected String[] menuitems = new String[]{"1. menu item choice1", "2. menu item choice2"};
public void displayMenu() {
for(String item : menuitems) System.out.println(item);
}
}