Interface(接口)、与抽象类的异同
Interface(接口)、与抽象类的异同
定义 :
是一种顶级的规范契约,必须严格遵守
关键字interface
public interface 接口名{
//属性,都是公开静态属性(常量)
//方法,都是公开的抽象的方法
}
命名规范
以l开头
以able结尾
特点
接口中不能有普通属性,构造方法,普通方法,可以有公开静态的常量属性以及抽象方法(关键字可以省略
public abstract),默认方法和静态方法。注意: 真正开发中接口中往往只有方法,所以,接口是一种方法(行为)的集合
接口不能实例化,它天生是用来被实现的,一个类可以通过implements来实现接口,而且可以多重实现
接口和接口之间可以继承,而且可以多重继承
一个类实现了接口,则必须重写这个接口中所有的抽象方法,除非这个类是抽象类
注意⚠️
/**JDK8.0默认方法*/
default void method2() {
System.out.println("接口的默认方法...");
}
默认方法是java8中新添加的方法,其重要作用就是“接口演化”。
假如很久之前创建了一个接口,并且这个接口已经被很多类实现了,但是现在你需要给这个接口中扩展一个新方法A,这就导致前面那些已经实现该接口的类必须要重写这个方法A,否则就不能编译。
而使用默认方法就能很好的解决这个问题,你只需将要扩展的新方法A定义为default,原来的实现子类就不需要重写该方法,现在要实现该接口的子类就可以扩展这个方法了。
/**JDK8.0静态方法*/
public static void method3() {
System.out.println("接口中的静态方法");
}
接口静态方法和默认方法类似,只是接口静态方法不可以被接口实现类重写。
接口静态方法只可以直接通过静态方法所在的 接口名.静态方法名 来调用。
扩展分类
常量接口:只有属性(常量),没有方法的接口.统一管理系统中所有的常量,注意⚠️:JDK5.0之后提供了枚举用来代替常量接口
标记接口:既没有属性,也没有方法的接口,通过检测对象是否实现了标记接口从而进行不同的处理策略(区别对待)
抽象类和接口的异同
相同点:
都是抽象数据类型
都不能被实例化
不同点:
抽象类中可以有实现的方法,接口中不可以
抽象类中可以有构造方法,接口中不可以
抽象类只能单继承,但是接口可以多继承
一个类只能继承一个抽象类,但是可以实现多个接口
总结:抽象类关注类定义(名词),接口关注提供行为能力(动词)。

浙公网安备 33010602011771号