开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第21天
java创建对象时为什么要前写接口后写类?
开始这个问题之前,我们要先明白,为什么要用接口?
通俗来讲,接口是一个规范,在大型项目开发中,如果没有接口做规范,为类中的方法取自己的名字,等有一天员工离职了,进来的新员工看着这些方法面如死灰…
但如果有了接口,一切都不一样了,员工们每个人都在类中实现接口方法,一切都变得井然有序,新入员工打开接口一看,一目了然…
当然,如果我们是自己在写小程序,有时创建接口反而显得多余,不如让自己即兴发挥,为每个方法取一个只有自己认识的名字
明白了为什么要定义接口,我们接下来就会实现接口,再接着就会创建实例,但有时候我们是这样创建实例的:
BookService bookService = new BookServiceImpl();
这里BookService是接口名,BookServiceImpl是实现接口的类名,这样前写接口后写类名可以限制你只能使用接口中定义的方法,而不能调用在BookServiceImpl类中自己定义的方法。
比如接口中是这样写的:
public interface BookService {
public void save();//只定义了save方法
}
类中是这样定义的:
public class BookServiceImpl implements BookService {
BookDaoImpl bookDao = new BookDaoImpl();
public void save() {
System.out.println("service save...");
bookDao.save();
}
//这个only方法在接口中没有,是属于这个类自己的方法
public void only(){
System.out.println("111");
}
}
当我们使用前接口后类(多态)的方式创建实例,调用only方法时,就会爆红:Cannot resolve method 'only' in 'BookService'
这样做就规范了开发者的行为,让开发者谨遵接口定义进行开发,如有朝一日我们需要用BookDaoImpl2来替代BookDaoImpl,只需要修改创建实例那一行,而不用去担心后续代码调用了BookDaoImpl中自有的方法:
BookDaoImpl bookDao = new BookDaoImpl2();
当然,有的时候也是需要在类中创建自己的方法,这时创建实例就需要前写类后也写类了
该文章仅为自己查阅资料后的总结思考,未必正确,若有错误还请指出!