就以简单的学生日志管理系统为例。
先定义一个简单的学生类(student)
public class Student {
String sno; //学号
String sname; //姓名
String pwd; //密码
//set get方法省略....
}
日志类(daily)
public class Daily {
private int dno; //编号
private String content; //内容
private int starts; //掌握程度 1:了解 2:熟练 3:精通
private String ques; //疑问
private Student stu; //日志提交人
}
可以为这两个类通过接口写一些简单的增删改查等方法。
public interface BaseManager {
public boolean add(Object obj);
public boolean del(Object obj);
public boolean update(Object obj);
public ArrayList findAll(Object obj);
public Object findOne(Object obj);
}
在这里Object为父类对象指向子类对象的引用。
可以加上泛型,因为调用后面实现接口的方法中不需要将传进去的学生对象或者是日志对象进行强转
例如(Student stu = (Student)obj)
public interface BaseManager<T> {
public boolean add(T t);
public boolean del(T t);
public boolean update(T t);
public ArrayList findAll(T t);
public Object findOne(T t);
}
StudentImpl接下来以一个简单的实现接口为例,红色省略的代码行可以看出泛型的基本作用。
public class StudentManager implements BaseManager<Student>{
static ArrayList<Student> stus = new ArrayList<>();
@Override
public boolean add(Student stu) {
//Student stu = (Student)obj;
//判断当前添加的学生是否已经存在
for(Student s:stus){
if(Objects.equals(stu.getSno(), s.getSno())){
//已存在
return false;
}
}
//加入集合
return stus.add(stu);
}
@Override
public boolean del(Student stu) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean update(Student stu) {
// TODO Auto-generated method stub
return false;
}
@Override
public ArrayList findAll(Student stu) {
// TODO Auto-generated method stub
return null;
}
//登录
@Override
public Object findOne(Student stu) {
//Student stu = (Student)obj;
for(Student s:stus){
//比较两个学生对象是否一致(学号和密码)
if(Objects.equals(s, stu)){
return s;
}
}
return null;
}
}