终于敲完了!请老师和同学们过目!请问还有可以完善的地方吗?^V^
import java.util.Scanner; public class Test { public static void main(String[] args) { ShowList.showList(); Scanner sc = new Scanner(System.in); int n1, n2; boolean flag = false; while (true){ //利用while大循环,把整个节目内容整体包括(这一步很关键!) if (flag) { //在选择完节目后,进行判断,只有当flag为true时,才输出提示语句 System.out.println("****** 是否继续观看(1/0) ******"); n1=sc.nextInt(); switch (n1) { case 1: ShowList.showList(); break; case 0: System.out.println("****** 欢迎下次光临~ ******"); System.exit(1); //若n1为0,终止程序 default: System.out.println("****** 输入信息不正确,请重新输入 ******"); ShowList.showList(); break; } } n2 = sc.nextInt(); //节目选项 switch (n2) { case 1: Animal bear = new Bear(); //利用向上转型,父类引用指向子类对象 ((Bear) bear).act(); //向下转型(强制转换)调用act方法 flag = true; //为了能通过上面的if语句,从而输出提示语句,把flag变成true break; case 2: Animal lion = new Lion("公狮", "灰色"); ((Lion) lion).act(); flag = true; break; case 3: Animal monkey = new Monkey("金丝猴"); ((Monkey) monkey).act(); flag = true; break; case 4: Animal parrot = new Parrot("牡丹鹦鹉"); ((Parrot) parrot).act(); flag = true; break; case 5: Clown clown = new Clown("Kahle", 5); clown.act(); flag = true; break; default: System.out.println("****** 输入信息不正确,请重新输入 ******"); ShowList.showList(); break; } } } } ========================================================= public class ShowList { public static void showList() { 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 abstract class Animal { private String name; private int age; public Animal(){ //父类Animal中必须有构造方法,否则会报错!虽然没有内容,但很重要! } public Animal(String name,int age){ this.setName(name); this.setAge(age); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public abstract void love(); } ========================================================= public class Bear extends Animal implements IAct{ public Bear(){ super("Bill",1); } @Override public void skill() { System.out.println("技能:挽着花篮,打着雨伞,自立走秀"); } @Override public void love() { System.out.println("爱好:喜欢卖萌"); } @Override public void act() { System.out.println("表演者:"+getName()); System.out.println("年龄:"+getAge()+"岁"); this.skill(); this.love(); } } ========================================================= public class Lion extends Animal implements IAct { private String color; private String sex; public Lion(String sex,String color){ super("Lain",2); this.setSex(sex); this.setColor(color); } @Override public void skill() { System.out.println("技能:擅长钻火圈"); } @Override public void act() { System.out.println("表演者:"+getName()); System.out.println("年龄:"+getAge()+"岁"); System.out.println("性别:"+this.getSex()); System.out.println("毛色:"+this.getColor()); this.skill(); this.love(); } @Override public void love() { System.out.println("爱好:喜欢吃各种肉类"); } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } } ========================================================= public class Monkey extends Animal implements IAct { private String type; public Monkey(String type){ super("Tom",1); this.setType(type); } @Override public void skill() { System.out.println("技能:骑独轮车过独木桥"); } @Override public void act() { System.out.println("表演者:"+getName()); System.out.println("年龄:"+getAge()+"岁"); System.out.println("品种:"+getType()); this.skill(); this.love(); } @Override public void love() { System.out.println("喜欢模仿人的动作表情"); } public String getType() { return type; } public void setType(String type) { this.type = type; } } ========================================================= public class Parrot extends Animal implements IAct { private String type; public Parrot(String type){ super("Rose",1); this.setType(type); } @Override public void skill() { System.out.println("技能:擅长模仿"); } @Override public void act() { System.out.println("表演者:"+getName()); System.out.println("年龄:"+getAge()+"岁"); System.out.println("品种:"+getType()); this.skill(); this.love(); } @Override public void love() { System.out.println("爱好:喜欢吃坚果和松子"); } public String getType() { return type; } public void setType(String type) { this.type = type; } } ========================================================= public class Clown implements IAct { private String name; private int years; public Clown(String name,int years){ this.setName(name); this.setYears(years); } @Override public void skill() { System.out.println("技能:脚踩高跷,进行杂技魔术表演"); } public void dress(){ System.out.println("着装:身穿五彩服装,头上戴着彩色的帽子,脸上画着夸张的彩妆"); } @Override public void act() { System.out.println("表演者:"+getName()); System.out.println("艺龄:"+getYears()+"年"); this.dress(); this.skill(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getYears() { return years; } public void setYears(int years) { this.years = years; } } ========================================================= public interface IAct { void skill() ; void act(); }
正在回答 回答被采纳积分+1
你好!代码整体上完成得不错,存在的一些问题和建议如下:
1、建议每个实现类中定义带参构造方法,不是直接在此处为成员变量赋值,而是在Test类中完成。
构造方法形式如下:
2、不是定义Animal引用指向子类对象,而是定义IAct引用指向子类对象,然后直接调用act方法。如:IAct actor=null; actor=new Bear("Bill",1);actor.act();
为了体现多态,不能去直接创建实现类的对象,应该先声明一个接口的引用,如:IAct actor=null;然后在case 语句后面进行对象的创建,如case 1后的代码为:actor= new Bear("Bill", 1);
最后act方法的调用写在switch结构的外面,即actor.act();
从上述的流程上看,通过接口的引用指向了子类的对象,最后去调用act()方法,因为actor引用指向的对象不同,调用act()方法就会输出不同的结果。这就是多态的体现。
3、继续输入的问题,建议把代码写到switch结构的下面,当输入错误后一直继续输入,直到输入正确才显示菜单,思路如下:
定义一个boolean值,初始值为true
使用while循环,当boolean值为true时,执行如下操作:
1)输出提示信息是否继续观看
2)switch结构,当输入数据为1时,boolean值设置为false
当输入为0时,提示欢迎下次光临
当输入0/1以外的值时,提示输入不正确,重新输入
4、这个问题,按照上面去改,循环开始显示菜单,不做继续输入的判断,继续输入的判断写到switch下面
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星