# 实验三 基于继承关系改进学生选课模拟系统 **Repository Path**: night-yang/homework3 ## Basic Information - **Project Name**: 实验三 基于继承关系改进学生选课模拟系统 - **Description**: 学校作业 实验三 基于继承关系改进学生选课模拟系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-17 - **Last Updated**: 2023-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实验三 基于继承关系改进学生选课模拟系统 #### 介绍 学校作业 实验三 基于继承关系改进学生选课模拟系统 #### 实验目的 掌握权限访问控制修饰符的使用; 掌握继承的使用。 #### 业务要求 1. 保持实验二的代码和readme版本不变; 2. 新建代码仓库,在实验二代码的基础上完成本次实验; 3. 业务过程同实验二,但在类的设计上,采用父类-子类的继承关系定义,探讨该系统中哪些类具有共性,作为父类,定义子类; 4. 父类定义构造方法,子类定义构造方法,掌握super()用法; 5. 基础对象类和测试类分别存放于不同的package中,验证权限访问控制、继承后属性及方法的可见性。 #### 实验要求 提交源程序到本人代码托管系统。 写实验报告文件(readme.md),体现本次实验在实验二基础上的改进。 #### 解题思路 1. 创建一个新的People类,包含id,name,sex三个protected修饰的类变量。 2. Student和Teacher类extends自People。两个类去除people含有的属性及方法。两个子类中使用super调用父类people的构造方法,传入id,name和sex,除此之外,实验二本身的代码中也已经有用到继承关系: **MyFrame extends JFrame** ,继承关系完美体现。 3. 创建两个包,Main和Myframe和Button放在test包中,其它对象类放在objs包中。 4. 为更好地体现权限访问控制,且因逻辑和布局混在一起不规范,优化代码冗长的Myframe类,考虑到应该尽量不实例化Main类且应尽量少的使用static关键字以节约内存开销,将控件响应事件代码分离至新类Button中,以缺省关键词修饰。 5. 自此public,private,缺省,protected四种修饰词在代码中都有了体现,在同包/同类/不同包/不同类之间相互调用均十分完美。 6. 之前的代码中的加课部分,只要内部不报错就能跑到加课成功的弹窗代码否则无反馈,现添加如加课失败等提示。 7. 控件响应事件加入异常抛出机制。 #### 关键代码 1. People类的类变量 ``` public class People { protected int id; protected String name; protected String sex; ... } ``` 2. Student和Teacher类继承自People类,并使用super()调用父类构造方法。 ``` public class Student extends People{ Course[] courses; public Student(int id,String sex,String name) { super(id,name,sex); this.courses=new Course[30]; } ``` ``` public class Teacher extends People{ public Teacher(String name, int id, String sex) { super(id,name,sex); } } ``` #### 感想体会 1. 在以前的开发中,我几乎不会用到protected关键词,而全部使用public或private处理,经过本次实验的学习了解到了protected的使用场景。 2. 说点意外收获,经过反复的修改对比,我发现应该尽可能的将变量的作用域尽可能限制在其实际需要的范围内,不仅可以提高代码的可读性和维护性,同样可以减小内存开销。在java中变量的声明不一定是放在所有代码最上方最好。 3. 距离写出优雅规范的代码仍需努力。 4. 异常处理写的不太好,弹窗代码应该放在finally里,throw语句应该删掉,其实是为了下次实验的优化内容能更丰富 :stuck_out_tongue_winking_eye: 。其实我也不太明确什么时候直接写try catch,什么时候用throws然后在调用时catch好,如果方便老师可以讲一下。 5. 本次实验内容较少且简单,就不再为了延长篇幅在报告里添加没有太大意义的东西了。