java学习 学生管理系统-v4.0
本次将使用抽象类来对上次的学生管理系统-v3.0进行改进。
抽象类
抽象方法
当我们在父类中编写了一个所有子类都一定会有,但是每个子类具体的方法内容又不一样的方法,这个方法就可以写成抽象方法;
思考: 为什么一定要在父类中写所有子类都有,但是内容又不一样的方法呢?
答: 是因为父类一旦编写了这样的方法,所有的子类都必须强制性重写;
抽象类
包含了抽象方法的类一定是抽象类;
是不是抽象类就一定会包含抽象方法呢?
答: 不一定;
如何编写抽象方法和抽象类
//抽象类
public abstract class 类名{
//抽象方法 子类一定会重写该方法
public abstract 返回值类型 方法名(形参);
}
抽象类的注意事项
抽象类不能实例化
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
可以有构造方法
抽象类的子类要么重写抽象类中的所有抽象方法,要么是抽象类
代码实现
抽象类修改StudentDAO
上篇我们对StudentDAO做了继承处理,将重复的代码提取到其父类BaseStudentDAO中去。但是我们要想换一种方式来存贮数据,或者说,不用列表而用数组的形式来操作,这样做虽然方法都一样,但是方法中的内容却大不同,因此我们需要用到抽象类来修改之前的BaseStudfentDAO。
public abstract class BaseStudentDAO {
//添加学生操作
public abstract boolean addStudent(Student stu);
//查询所有学生
public abstract ArrayList findAllStudent();
//删除学生操作
public abstract boolean delStudent(Integer id);
//修改该id的对象属性
public abstract boolean editStudent(Student newStu);
}
这样只要继承了BaseStudentDAO的子类,就必须重写其父类中的抽象方法,这样就实现了各个子类中内容不同。
使用静态代码块实现列表中学生初始化添加
来StudfentDAO中添加静态代码块,静态代码块会随着类加载的时候执行,且只执行一次,所以可以进行一些数据初始化的操作。
private static ArrayList list = new ArrayList<>();
static {
list.add(new Student(1001, "张三", 23, "1996-10-14"));
list.add(new Student(1002, "李四", 24, "1997-09-15"));
list.add(new Student(1002, "王五", 25, "1998-08-16"));
}