To have more abstraction :
interface IDAO {
public save(T t);
public T getById(int id);
//...etc
}
then
public CustomerDao implements IDAO{
public save(Customer c){
//Code here
}
public Customer getById(int id){
//Code here
}
}
and DAO tO another domain
public UniversityDao implements IDAO{
public save(University u){
//Code here
}
public University getById(int id){
//Code here
}
}
Now the presentation layer or the main Class will contain the code like this :
IDAO dao;
dao=new CustomerDao();
//...
dao=new UniversityDao();