重载和继承的实践

实验三 重载和继承的实践

实验目的

1.掌握Java语言的特点封装继承和多态;

2.掌握方法的重载;

3.掌握继承的实现。

实验内容

编写一个简单的考试程序,在控制台完成出题、答题的交互。试题(Question)分为单选(SigleChoice)和多选(MultiChoice)两种,其中,单选题和多选题继承试题类。试题间的关系如下所示。实现类及其测试。

三、 程序代码及分步功能解析

java 复制代码
package A;

//导入工具类
import java.lang.reflect.Array;
import java.util.Arrays; //导入数组工具类,多选判断答案
import java.util.Scanner;//导入扫描器工具 ,用于接收用户在控制台输入的答案

//核心类1 测试基类 Question 父类
public class Question {
    //类的属性
    String test;//题干
    String[] options;//选项

    //法1:无参构造
    public Question(){}

    //法2:有参构造
    public Question(String test,String[] options){
        this.test=test; //把题干赋值给当前对象的test属性
        this.options=options;//同理
    }

    //法1:检查答案
    public boolean checkAnswer(char[] answers){
        return false;
    }
    //法2:打印题目
    public void print(){}
}
//核心类2 单选 SingleQuestion 继承
//单选题
class SingleQuestion extends Question{
    char answer; //新增属性
    //法1:无参
    public SingleQuestion(){}
    //法2:有参
    public SingleQuestion(String test,String[] options,char answer){
        super(test,options);//调用父类的有参构造,初始化题干,选项
        this.answer=answer; //单独初始化答案
    }
    //重写父类:检查单选题答案

    //逻辑:
    //1.确保用户输入答案 answers.length>0
    //2.用户输入第一个字符等于正确答案 answers[0]

    public boolean checkAnswer(char[] answers){
        return answers.length>0 && answers[0]==this.answer;
    }

    //重写父类:打印单选
    public void print(){
        System.out.println(test);//打印题干
        //循环打印所有选项
        for(int i=0;i<options.length;i++){
            System.out.println(options[i]+'\t');
        }
        System.out.println();//换行
    }
}
//核心类3 多选 MultiQuestion 继承
//多选题
class   MultiQuestion extends Question{
    char[] answer; //新增属性
    //构造
    public MultiQuestion(){}
    public MultiQuestion(String test,String[] options,char[] answer){
        super(test,options);//调用父类有参构造,初始化
        this.answer=answer;//单独初始化答案
    }
    //重写父类:检查多选题答案
    //用Arrays工具类的equals方法,比较"用户输入"与"答案"是否一致
    public boolean checkAnswer(char[] answers){
        return Arrays.equals(this.answer,answers);
    }
    //打印多选,同理
    public void print(){
        System.out.println(test);
        for(int i=0;i<options.length;i++){
            System.out.println(options[i]+'\t');
        }
        System.out.println();
    }
}
//核心类4:测试类 ExamTest 程序入口,负责运行整个答题流程
//测试类
class ExamTest{
    //main方法,Java程序的入口(程序从这开始执行)
    public static void main(String[] args){
        //创建扫描对象,用于读取用户输入
        //处理单选:创建单选对象-打印题目-接收输入-判断答案-输出结果
        Scanner scanner=new Scanner(System.in);
        //创建单选对象并测试
        SingleQuestion singleQ=new SingleQuestion("最早向刘备推荐诸葛亮的是谁?",
                new String[]{"A:徐庶","B:司马徽","C:鲁肃","D:关羽"},'B');
        singleQ.print();//调用print在控制台显示
        System.out.print("请输入单选题答案:");//提示用户输入
        //读取用户输入,转化成字符数组
        char[] singleAns=scanner.nextLine().toCharArray();
        //调用checkAnswer方法,判断答案是否正确
        boolean singlePass=singleQ.checkAnswer(singleAns);
        //根据判断结果输出提示
        if (singlePass){
            System.out.println("恭喜,单选题答对了!");
        }else {
            System.out.println("单选还得努力啊!");
        }

        //创建多选题对象并测试
        //处理多选题,与单选同理,对象不同
        MultiQuestion multiAns =new MultiQuestion("三国演义中的三绝是谁?",
                new String[]{"A:曹操","B:刘备","C:关羽","D:诸葛亮"},
                new char[]{'A','B','C'});//答案,多个,字符组
        multiAns.print();
        System.out.print("请输入多选答案:");
        char[] usermultiAns = scanner.nextLine().toCharArray();
        boolean multiPass=multiAns.checkAnswer(usermultiAns);
        if (multiPass){
            System.out.println("恭喜,多选题答对了!");
        }else {
            System.out.println("多选还得努力啊!");
        }
        scanner.close();
    }
}

四、程序调试结果(要求截取详细步骤)

五,实验总结

本次实验成功实现了基于继承和多态的考试程序,全面且深入地实践了 Java 面向对象编程的核心概念。实验不仅帮助我巩固了"封装、继承、多态、方法重载"的理论知识,更在实际编码与问题解决的过程中,提升了对面向对象思想的运用能力,为后续更复杂的 Java 编程学习奠定了坚实的基础。

相关推荐
霸道流氓气质2 分钟前
Spring AI 技术细节:RAG QuestionAnswerAdvisor 设计与实现
java·人工智能·spring
平头哥AI24 分钟前
Day 01 | go run 跑通第一个 Go 程序,go build 留下一个能拷走的 exe
开发语言·后端·golang
斑马13930 分钟前
Linux软件编程学习笔记(十二)——TCP并发服务器模型
java·服务器·网络
冬栈程序设计35 分钟前
Springboot宿舍管理系统【670099】 -附源码(开箱即用)
java·毕业设计·springboot·课程设计·程序设计·大作业
2601_9622845043 分钟前
北京Java全栈开发培训 Web前端开发 软件测试就业培训班
java·软件测试·web前端·全栈开发·就业培训
葡萄城技术团队1 小时前
工业数据可视化:使用活字格 AIcoding + Three.js 构建轻量化三维设备监控大屏
开发语言·javascript·信息可视化
qiaosaifei1 小时前
JAVA老项目中有大量的类名_编译时报找不到符号错误
java·开发语言
聪明蛋子哟1 小时前
MCP协议深度落地:如何用Python/Java双语言实现统一的工具调用网关?
java·开发语言·python
文子越来越强1 小时前
【双因子认证】拦截注解@MFACheck 接入指南(其他微服务如何用)
java
一晌小贪欢2 小时前
python-第27天:Python面向对象详解
开发语言·python·数据可视化·面向对象·python办公