一、static方法
接口中的static方法与类中的static方法很像,都是直接调用:interface名.static方法,静态方法必须写函数体,否则会报错
创建接口,定义静态方法:
public interface static_interface {
static void print(){
System.out.println("我是接口中的静态方法");
}
}
实现接口并调用静态方法:
public class Test implements static_interface{
public static void main(String[] args) {
static_interface.print();
}
}
二、default方法
接口中的default方法表示接口中默认的方法,必须写函数体,这种默认方法在实现类中不需要重写即可直接使用。
创建接口,定义default方法
public interface default_interface {
default void print(){
System.out.println("我是接口中的default方法");
}
}
实现接口并调用default方法
public class Test2 implements default_interface{
public static void main(String[] args) {
new Test2().print();
}
}
三、default的注意事项
- 实现类中default方法可以不重写直接使用
- 如果一个类同时实现了多个接口,并且这些接口中有相同的default方法,那么我们必须重写default方法才可以使用
原理很简单,那么多相同的default方法,不重写程序怎么会知道运行哪个呢。 - 如果一个子类继承了父类,父类中有a()方法,同时这个子类又实现了一个接口,这个接口中也有a()方法(被default修饰),那么子类在调用a()方法的时候,会调用父类中的a()方法,而不调用接口中的a()方法
- 一个接口中可以写多个default
### 四、接口与抽象类区别
接口已经越来越向类靠近了,所以现在接口和抽象类的区别有:
- 虽然接口和抽象类都不能被实例化,但是抽象类可以有构造器,接口没有构造器
- 抽象类单继承(只能继承一个类),接口多继承(能继承多个接口)
- 抽象类中方法可以有public、protected、默认(包)甚至private范围的方法,接口只能有public范围的方法(即使是default也是public范围的)