1.抽象类:被abstract修饰的只有声明,没有实现的类称为抽象类。
特殊的抽象类:如果一个抽象类中,其所有属性都是公开静态常量,所有方法都是公开抽象方法,我们可以将这种特殊的抽象类改写成接口。
改写成接口的方式:使用Interface关键字替换abstract class两个关键字;
接口的特点与上面个描述的特殊的抽象类一致:接口中所有属性都是公开静态常量,所以可以省略public static final三个关键字(既然大家都是一样的,默认省略即可),所有方法都是公开抽象方法,所以可以省略public abstract关键字(既然所有方法都是一样的,那么默认省略即可) 。
注意:interface 关键字和 class 关键字类似,一个接口编译后会生成一个.class 文件;一个.java 文件中可以有多个接口,但是最多只能有一个公开的接口,且公开接口的接口名与文件名相同。
接口和抽象类一样的地方在于:都只能声明引用,不能直接创建对象。
接口和抽象类不同的地方在于:抽象类可以拥有构造函数,虽然不能直接创建对象,但是可以在子类实例化时调用该抽象类的构造器;接口中不能定义构造方法,系统也不会提供默认无参的构造方法。
抽象类之间可以继承,接口和接口之间也有类似操作,同样使用extends关键字,但是接口之间的继承可以是多个,例如一个接口a可以同时继承接口b、c; 继承多个接口时,多个接口之间用逗号隔开(多继承)。
抽象类可以被子类继承,接口也可以被子类继承,接口中使用的关键字为implements意为实现;需要注意:1.子类实现接口,必须要实现接口中定义的全部方法才可;2.由于接口中的方法都是默认是public,但类中默认的方法都是default,所以接口的实现类中的方法中关键字public是不能省略的。
总结:接口与抽象类的不同在于,接口和接口之间可以多继承,并且一个类在继承一个类的同时,可以实现多个接口。