终于敲完了!请老师和同学们过目!请问还有可以完善的地方吗?^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 星