不明白如何从子类覆盖父函数

时间:2014-03-28 16:16:44

标签: 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.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()函数来显示新选项。我想如何为新选项添加​​功能,但是如何在不重写子类中的整个方法的情况下更改打印输出?

1 个答案:

答案 0 :(得分:1)

尝试将显示的内容(即菜单项字符串列表)与实际显示它们的代码分开。

在您编写的代码中,菜单项字符串列表在您的显示代码中为hardcoded,您可以将其视为对System.out.println功能的调用。

System.out.println("1. ...");
System.out.println("2. ...");

除非通过修改调用System.out.println的代码,否则无法将其他项添加到列表中。

您需要做的是将菜单项(字符串列表)存储在某些数据结构中(例如arraylistmap)。然后有一些显示代码从数据结构中读取项目并使用System.out.println()显示它们。

你要创造:

  1. 存储菜单项字符串的数据结构。您有很多选择:arrayslistsmaps

  2. 读取您已创建的数据结构并将菜单项打印到屏幕的功能。

  3. 比较

    System.out.println("1. menu item choice1");
    

    使用:

    String[] menuitems = new String[]{"1. menu item choice1", "2. menu item choice2"};
    
    for(String item : menuitems) System.out.println(item);
    

    现在您可以向菜单项数组添加内容,它们将自动打印在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,则可以更改菜单项。 displayMenu()会显示您的更改。

    您可能还想考虑:

    1. 一个获取菜单项字符串并将其添加到数据结构的函数
    2. 读取用户输入的功能
    3. 另一种将菜单项映射到实现它们的实际函数的数据结构。
    4. 最后一个实际上可能是存储菜单项的相同数据结构。实际上,您可能想要考虑如何映射菜单项字符串,用户的输入(int)以及正在调用的函数。

相关问题