java创建对象时为什么要前写接口后写类?

102 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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();

当然,有的时候也是需要在类中创建自己的方法,这时创建实例就需要前写类后也写类了

该文章仅为自己查阅资料后的总结思考,未必正确,若有错误还请指出!