java学习 学生管理系统-v4.0 抽象类

java学习 学生管理系统-v4.0

本次将使用抽象类来对上次的学生管理系统-v3.0进行改进。

抽象类

抽象方法

当我们在父类中编写了一个所有子类都一定会有,但是每个子类具体的方法内容又不一样的方法,这个方法就可以写成抽象方法;

思考: 为什么一定要在父类中写所有子类都有,但是内容又不一样的方法呢?

答: 是因为父类一旦编写了这样的方法,所有的子类都必须强制性重写;

抽象类

包含了抽象方法的类一定是抽象类;

是不是抽象类就一定会包含抽象方法呢?

答: 不一定;

如何编写抽象方法和抽象类

//抽象类
public  abstract class 类名{
    //抽象方法   子类一定会重写该方法
    public  abstract  返回值类型   方法名(形参);
}

抽象类的注意事项

  • 抽象类不能实例化
  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 可以有构造方法
  • 抽象类的子类要么重写抽象类中的所有抽象方法,要么是抽象类

代码实现

  1. 抽象类修改StudentDAO

上篇我们对StudentDAO做了继承处理,将重复的代码提取到其父类BaseStudentDAO中去。但是我们要想换一种方式来存贮数据,或者说,不用列表而用数组的形式来操作,这样做虽然方法都一样,但是方法中的内容却大不同,因此我们需要用到抽象类来修改之前的BaseStudfentDAO。

public abstract class BaseStudentDAO {
    
    //添加学生操作
    public abstract boolean addStudent(Student stu);

    //查询所有学生
    public abstract ArrayList<Student> findAllStudent();

    //删除学生操作
    public abstract boolean delStudent(Integer id);

    //修改该id的对象属性
    public abstract boolean editStudent(Student newStu);
}

这样只要继承了BaseStudentDAO的子类,就必须重写其父类中的抽象方法,这样就实现了各个子类中内容不同。

  1. 使用静态代码块实现列表中学生初始化添加

来StudfentDAO中添加静态代码块,静态代码块会随着类加载的时候执行,且只执行一次,所以可以进行一些数据初始化的操作。

    private static ArrayList<Student> 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"));
    }
posted @ 2020-10-13 20:12  真物°  阅读(172)  评论(0)    收藏  举报