java 扩展或覆盖 switch cases
java extending or overriding switch cases
我正在上 java 课程,所以我试图对代码含糊其词,这样我可以学习但不会作弊。任务是完成上周的程序并扩展功能。基本上,我编写了一个程序,其中我在两种情况下使用 switch(不确定这是最佳选择,但这是我所做的),我想添加更多用户选项。所以它目前允许输入 'w'、'x',但我想通过扩展 class A 和 class B 来添加 'y' 和 'z' 作为选项.
class A 中有一个默认情况,它基本上输出 "only enter 'w' and 'x'." 问题是,即使使用扩展它的新 B class,它也阻止了除 'w' 和 'x'。
我知道我需要 B class 来覆盖它,因此它允许 w、x、y 和 z,然后在除了那些 四个选项 被输入。不管怎样,请帮忙!
下面是 class A(我删除了我的问题的一些代码,但所有变量、用户输入和扫描仪都有效。这是我遇到问题的情况):
import java.util.Scanner;
public class A {
public A()
{
// define and implement variables
// call scanner into existance to read inputs from the user
// Ask for user input (abbreviated section) and store in variables
oper = myManager.next(".").charAt(0);
switch(oper)
{
// case w call to firstMethod method
case 'w':
DoSomething = firstMethod(num1,num2);
System.out.println(" The result is "+FirstAns);
break;
// case w call to secondMethod method
case 'x':
DoSomethingElse = secondMethod(num1,num2);
System.out.println(" The result is "+SecondAns);
break;
default:
System.out.println(" Please Enter 'w' or 'x' only.");
}
/* note, this portion I got rid of some work, it's normally
math related but modified here just to return characters for
this post since I think it's irrelevant to my question (and I
don't want to cheat) */
static char firstMethod(char a)
{
return a;
}
static char secondMethod(char a)
{
return a;
}
}
}
下面是扩展 A 的 class B,我无法说服允许更多案例。请注意,编译后,我正在执行 B,但它仍然只允许来自 A 的案例。
import java.util.Scanner;
public class B extends A {
public B()
{
// define and implement variables
// call scanner into existance to read inputs from the user
// Ask for user input (abbreviated section) and store in variables
oper = myManager.next(".").charAt(0);
switch(oper)
{
// case w call to firstMethod method
case 'w':
DoSomething = firstMethod(num1,num2);
System.out.println(" The result is "+FirstAns);
break;
// case w call to secondMethod method
case 'x':
DoSomethingElse = secondMethod(num1,num2);
System.out.println(" The result is "+SecondAns);
break;
case 'y':
DoSomethingMore = thirdMethod(num1,num2);
System.out.println(" The result is "+ThirdAns);
break;
// case w call to firstMethod method
case 'z':
DoSomethingLast = fourthMethod(num1,num2);
System.out.println(" The result is "+FourthAns);
break;
default:
System.out.println(" Please Enter 'w', 'x', 'y', or 'z' only.");
}
}
// again, simplified this portion
static char thirdMethod(char a)
{
return a;
}
static char fourthMethod(char a)
{
return a;
}
public static void main(String[] args) {
B b = new B();
}
}
然后我更新测试程序以导入 class B(而不是导入 A 的旧程序,因为 B 应该扩展 A)。但它仍然只显示来自A的案例。我知道这是程序如何加载案例的操作顺序,只是不知道如何解决它。
superclass 的默认构造函数总是首先被 subclass 的默认构造函数调用。
在您的示例中,class A 构造函数在使用默认构造函数创建 class B 时被调用。
一个解决方案是将您的逻辑移动到在两个 classes 中具有相同签名的方法中,并在 superclass.
的构造函数中调用该方法
像这样:
class A {
public A() {
logic();
}
private void logic() {
// Your switch of A
}
}
class B extends A {
public B() {
super();
}
private void logic() {
// Your switch of B
}
}
动态绑定是此解决方案背后的OO-principle。
我正在上 java 课程,所以我试图对代码含糊其词,这样我可以学习但不会作弊。任务是完成上周的程序并扩展功能。基本上,我编写了一个程序,其中我在两种情况下使用 switch(不确定这是最佳选择,但这是我所做的),我想添加更多用户选项。所以它目前允许输入 'w'、'x',但我想通过扩展 class A 和 class B 来添加 'y' 和 'z' 作为选项.
class A 中有一个默认情况,它基本上输出 "only enter 'w' and 'x'." 问题是,即使使用扩展它的新 B class,它也阻止了除 'w' 和 'x'。
我知道我需要 B class 来覆盖它,因此它允许 w、x、y 和 z,然后在除了那些 四个选项 被输入。不管怎样,请帮忙!
下面是 class A(我删除了我的问题的一些代码,但所有变量、用户输入和扫描仪都有效。这是我遇到问题的情况):
import java.util.Scanner;
public class A {
public A()
{
// define and implement variables
// call scanner into existance to read inputs from the user
// Ask for user input (abbreviated section) and store in variables
oper = myManager.next(".").charAt(0);
switch(oper)
{
// case w call to firstMethod method
case 'w':
DoSomething = firstMethod(num1,num2);
System.out.println(" The result is "+FirstAns);
break;
// case w call to secondMethod method
case 'x':
DoSomethingElse = secondMethod(num1,num2);
System.out.println(" The result is "+SecondAns);
break;
default:
System.out.println(" Please Enter 'w' or 'x' only.");
}
/* note, this portion I got rid of some work, it's normally
math related but modified here just to return characters for
this post since I think it's irrelevant to my question (and I
don't want to cheat) */
static char firstMethod(char a)
{
return a;
}
static char secondMethod(char a)
{
return a;
}
}
}
下面是扩展 A 的 class B,我无法说服允许更多案例。请注意,编译后,我正在执行 B,但它仍然只允许来自 A 的案例。
import java.util.Scanner;
public class B extends A {
public B()
{
// define and implement variables
// call scanner into existance to read inputs from the user
// Ask for user input (abbreviated section) and store in variables
oper = myManager.next(".").charAt(0);
switch(oper)
{
// case w call to firstMethod method
case 'w':
DoSomething = firstMethod(num1,num2);
System.out.println(" The result is "+FirstAns);
break;
// case w call to secondMethod method
case 'x':
DoSomethingElse = secondMethod(num1,num2);
System.out.println(" The result is "+SecondAns);
break;
case 'y':
DoSomethingMore = thirdMethod(num1,num2);
System.out.println(" The result is "+ThirdAns);
break;
// case w call to firstMethod method
case 'z':
DoSomethingLast = fourthMethod(num1,num2);
System.out.println(" The result is "+FourthAns);
break;
default:
System.out.println(" Please Enter 'w', 'x', 'y', or 'z' only.");
}
}
// again, simplified this portion
static char thirdMethod(char a)
{
return a;
}
static char fourthMethod(char a)
{
return a;
}
public static void main(String[] args) {
B b = new B();
}
}
然后我更新测试程序以导入 class B(而不是导入 A 的旧程序,因为 B 应该扩展 A)。但它仍然只显示来自A的案例。我知道这是程序如何加载案例的操作顺序,只是不知道如何解决它。
superclass 的默认构造函数总是首先被 subclass 的默认构造函数调用。
在您的示例中,class A 构造函数在使用默认构造函数创建 class B 时被调用。
一个解决方案是将您的逻辑移动到在两个 classes 中具有相同签名的方法中,并在 superclass.
的构造函数中调用该方法像这样:
class A {
public A() {
logic();
}
private void logic() {
// Your switch of A
}
}
class B extends A {
public B() {
super();
}
private void logic() {
// Your switch of B
}
}
动态绑定是此解决方案背后的OO-principle。