重载和继承的实践

实验三 重载和继承的实践

实验目的

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 编程学习奠定了坚实的基础。

相关推荐
王嘉俊9252 小时前
设计模式--适配器模式:优雅解决接口不兼容问题
java·设计模式·适配器模式
王嘉俊9252 小时前
设计模式--组合模式:统一处理树形结构的优雅设计
java·设计模式·组合模式
道19932 小时前
50 台小型无人车与50套穿戴终端 5 公里范围内通信组网方案深度研究
java·后端·struts
迎風吹頭髮2 小时前
UNIX下C语言编程与实践35-UNIX 守护进程编写:后台执行、脱离终端、清除掩码与信号处理
java·c语言·unix
光军oi3 小时前
全栈开发杂谈————JAVA微服务全套技术栈详解
java·开发语言·微服务
帮帮志3 小时前
目录【系列文章目录】-(关于帮帮志,关于作者)
java·开发语言·python·链表·交互
聪明的笨猪猪3 小时前
Java Spring “MVC ”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
qiuiuiu4133 小时前
正点原子RK3568学习日记-GIT
linux·c语言·开发语言·单片机
草莓熊Lotso3 小时前
《C++ STL list 完全指南:从基础操作到特性对比,解锁链表容器高效用法》
开发语言·c++·list