对于7-2作业题老师的点评不是很理解,请老师解答一下

对于7-2作业题老师的点评不是很理解,请老师解答一下

public class Test {
	// 声明对象依次进行实例化操作
	// 这里使用的是向上转型
	IAct bear = new BrownBear("Bill", 1);
	IAct lion = new Lion("Lain", 2, "公狮", "灰色");
	IAct monkey = new Monkey("Tom", 1, "金丝猴");
	IAct parrot = new Parrot("Rose", 1, "牡丹鹦鹉");
	IAct clown = new Clown("Kahle", 5);

	// 菜单的方法
	public void menu() {
		System.out.println("********欢迎来到太阳马戏团********");
		System.out.println("**********  请选择表演者   **********");
		System.out.println("**********   1、棕熊      **********");
		System.out.println("**********   2、狮子      **********");
		System.out.println("**********   3、猴子      **********");
		System.out.println("**********   4、鹦鹉      **********");
		System.out.println("**********   5、小丑      **********");
	}

	// 选择是否继续观看方法
	public void watch() {
		boolean flag = true;
		while (flag) {
			System.out.println("*****   是否继续观看(0/1)   *****");
			Scanner sc = new Scanner(System.in);
			int a = sc.nextInt();
			switch (a) {
			case 0:
				System.out.println("******** 欢迎下次光临   ********");
				break;
			case 1:
				performer();
				break;
			default:
				System.out.println("***输入的信息不正确,请重新输入***");
				continue;
			}
			flag = false;
		}

	}

	// 选择表演者的方法
	public void performer() {
		boolean flag = true;
		while (flag) {
			menu();
			Scanner sc = new Scanner(System.in);
			int b = sc.nextInt();
			switch (b) {
			
			case 1:
				System.out.println(bear.act());
				break;
			case 2:
				System.out.println(lion.act());
				break;
			case 3:
				System.out.println(monkey.act());
				break;
			case 4:
				System.out.println(parrot.act());
				break;
			case 5:
				System.out.println(clown.act());
				break;
			default:
				System.out.println("***输入的信息不正确,请重新输入***\n");
				continue;
			}
			flag = false;
			watch();
		}
	}

	public static void main(String[] args) {
		Test test = new Test();
		test.performer();

	}
}

讲师点评:程序可以运行,但作业中要求是要用多态来实现 ,如果用多态来实现performer() 中,就需要在外面事先定义IACT iAct;。例如case 1:iAct = new Bear("Bill", 1);break; case 2:iAct = new Lion("Lail", 2, "灰色", "公狮");出switch后再iAct.act();。

我的问题:我不是很理解老师说的这个意思,麻烦老师详细解答一下,我的程序哪里出现问题,或者不完善的地方。谢谢老师!

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你的作业可以运行,但是与作业的要求不一致。你是事先定义好了5个动物

        IAct bear = new BrownBear("Bill", 1);
    IAct lion = new Lion("Lain", 2, "公狮", "灰色");
    IAct monkey = new Monkey("Tom", 1, "金丝猴");
    IAct parrot = new Parrot("Rose", 1, "牡丹鹦鹉");
    IAct clown = new Clown("Kahle", 5);

但项目中多态的应用,更多的是老师点评的那样使用。定义一个对象,就一个对象,例如叫iAct。此对象可能是BrownBear,也可能是Lion等,但它们有一个共同的接口,act( ),这样的好处是扩展性较强,例如日后又多了一个动物Dog,你可以思考一下,老师建议的方案跟你自己写的对比一下,哪一个方案的修改量是最少的?你可能说也就差一行代码的事儿。确实是这样,功能简单所以差的少,但在大的项目中功能复杂,可能会涉及多处.java文件。一旦修改的地方多了,就容易出现bug,不好维护。

  • Mitsushima_Hikari 提问者 #1
    我大概明白老师说的意思了。是不是首先定一个接口的对象引用,如IAct iAct,然后在case语句中,用:iAct = new Bear("Bill", 1);这是用该类型的引用指向特定的实例,因为他们都是实现了接口IAct,所以根据多态只需要定义一个对象引用就可以了,不需要向我那样写,我那样写反而没有多态的思想了。 老师,我这么陈述对不对?是这个意思吧
    2018-06-22 20:56:52
  • Mitsushima_Hikari 提问者 #2
    非常感谢!
    2018-06-23 10:09:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师