今日提要:接口的静态方法和默认方法,接口与抽象类的区别
1.接口的方法
首先我们需要明确的是接口是一个抽象方法集,那就会有人问,为啥里面还有默认方法和静态方法,这两种拥有方法体的方法存在,当然这种规则是JDK1.8以后出现的,之前接口只是一个单纯的抽象方法集,那咱们就来说说这两个JDK1.8以后加入接口的方法有什么用处;
[1].先来说说接口的默认方法
- 我们来想象一种情况,如果一段代码经过一段时间的使用,某个通过校验并运行稳定,并被很多具体类调用的接口需要添加新的功能,我们要怎么办,当然你可以说,我们把新的方法抽象了放进这个接口就好了,那你想过没有,原来的代码是运行稳定的,你放入一个新的抽象方法在接口内,那么所有调用这个接口的具体类,都需要重新覆写这个抽象方法,如果不覆写的话,编译就无法通过,如果代码规模不大,并且你拥有修改这段代码的权限,那么也不是不可以;
- 但是如果代码的规模比较大,或者你根本没有修改全部代码的权限,那么明显只在接口里面加入一个抽象方法是行不通的,这个时候,JDK1.8提出的接口里的默认方法就可以帮你解决这个问题了;
- 简单的来说接口里的默认方法就是用于接口升级更新维护使用的;
- 由于默认方法有方法体,所以并不会硬性的要求具体类实例化它,但是可以按需调用或者覆写这个方法,那么原先代码里运行稳定的类,除了必须进行修改的外,别的类可以不用进行更新,这对代码的灵活性和维护起到了极大的帮助;
- 这里需要注意的是:接口的默认方法与抽象类方法名一样的时候,接口的默认方法优先级低,将被忽略,多个接口内有同样的方法名的方法,并且其中至少有一个为默认方法的时候,这个方法必须被具体类覆写;
[2].接口的静态方法
- 首先需要明确的是静态方法是一个类方法,同样的它也无需被具体类实例化,它的调用是通过
接口名.方法名();
来调用的,它的功能很简单,就是提供一个接口函数来满足调用接口的具体类共享数据(多数共享)或者特例调用(特殊需求); - 这个应该很好理解,要不就是有个数据大家都要用,大家共享起来比较方便,要不就是这个数据只有极少数具体类需要用,特殊给它提供的,没有什么不好理解的地方,其实和普通类里面的静态方法并没有什么太大的不同;
2.接口与抽象类的区别
项目 | 抽象类 | 接口 |
---|---|---|
构建基础 | 基于IS-A(是一个)建立的,比如:猫是一个哺乳动物,微波炉是一个家用电器 | 基于HAS-A(有一个)建立的,猫有一个捕鼠的能力,狗有一个看护保卫的能力 |
构造函数 | 有构造函数 | 没有构造函数 |
抽象方法 | 抽象类里不一定有抽象方法,含有抽象方法的类一定是抽象类,抽象方法不可以被private、fianl、static修饰 | 接口里面的类除了默认和静态(static修饰)方法外,均默认为抽象方法 |
作用 | 抽象类是子类的模板,它存在的意义就是被子类继承 | 接口提供的是附加功能,可以被多个继承树调用 |
今天说的东西都比较简单,要去努力肯两天书了,现在很多概念不太好理解,还是需要理解了,才能写出来