接口就是一份契约,方法名,返回值,抛出的异常你都得按照我的来。
抽象类包含一组具体的特征,比如某些品牌特定型号的汽车,底盘,控制电路,刹车系统等是抽象出来的特征,是一样的,但是根据高低配的不同,内饰,头等,显示屏这些可以存在不同的版本实现
具体到这个AbstractCollection抽象类,isEmpty的判空都是一样的,只要size==0就为空,但是size()的实现根据子类不同而不同,比如链表和顺序表的size方法实现就不一样,于是这里只是定义了一个抽象方法size,具体实现交给Abstractcollection的子类去实现
当纠结定义接口还是抽象类的时候,优先推荐定义接口,遵循接口隔离的原则,按照某个维度划分为多个接口,然后再用抽象类去implement某些接口,这样做可以方便后续的扩展和重构
接着Abstractcollection,我想找几个实现类看看是不是这样,找到了arraylist和linkedlist这两个子类,本来父类Abstractcollect实现类isEmpty方法,子类继承了直接使用就行,但是我发现arraylist中又把isEmpty实现了一遍,而且也是判断size==0 跟父类中一样,进而又发现了一个新的问题,linkedlist中size有transient修饰符而arraylist没有,于是想了解为什么linkedlist中的size要加上transient修饰符,在网上找了半天,没有找到答案