关于继承:不了解如何从子类覆盖父函数

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


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

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

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

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

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

进行显示。

您正在创建:

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

  • 一个函数,它读取您创建的数据结构并将菜单项打印到屏幕上。

  • 比较

    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子类化,则可以更改菜单项。 displayMenu()将显示您的更改。

    您可能还需要考虑:

  • 接受菜单项字符串并将其添加到数据结构的函数
  • 读取用户输入的功能
  • 另一个将菜单项映射到实现菜单项的实际功能的数据结构。
  • 最后一个实际上可能是与存储菜单项相同的数据结构。实际上,您可能需要考虑如何映射菜单项字符串,用户的输入(int)和所调用的函数。