Don't understand how to override parent function from subclass
我有一个坚持的问题。我有一个菜单驱动的计算器。我的计算器类包含方法displayMenu();看起来像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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.退出
您想做什么?
我知道以
开头
1 2 3 | public class ScientificMemCalc extends MC{ } |
但我不明白如何覆盖displayMenu()函数以显示新选项。我想,我知道如何为新选项添加??功能,但是如何在不重写子类中整个方法的情况下更改打印输出?
尝试将要显示的内容(即菜单项字符串的列表)与实际显示它们的代码分开。
在您编写的代码中,菜单项字符串的列表在显示代码中为
1 2 | System.out.println("1. ..."); System.out.println("2. ..."); |
除非通过修改调用
您需要做的是将菜单项(字符串列表)存储在某些数据结构(例如
进行显示。
您正在创建:
一种存储菜单项字符串的数据结构。您有很多选择:
一个函数,它读取您创建的数据结构并将菜单项打印到屏幕上。
比较
1 | System.out.println("1. menu item choice1"); |
具有:
1 2 3 | String[] menuitems = new String[]{"1. menu item choice1","2. menu item choice2"}; for(String item : menuitems) System.out.println(item); |
现在您可以将内容添加到菜单项数组中,它们将自动打印在for循环中。
1 2 3 4 5 6 7 | 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子类化,则可以更改菜单项。
您可能还需要考虑:
最后一个实际上可能是与存储菜单项相同的数据结构。实际上,您可能需要考虑如何映射菜单项字符串,用户的输入(int)和所调用的函数。