Inheritance Don';我不明白如何从子类重写父函数

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

我有一个问题,我被困在上面。我有一个菜单驱动的计算器。我的计算器类包含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()函数来显示新选项。我想,我知道如何为新选项添加功能,但如何在不重写子类中的整个方法的情况下更改打印输出?

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

在您编写的代码中,菜单项字符串列表被
硬编码到显示代码中,您可以将其视为对
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);
        }
    }