接口和抽象类的相同点
(1)接口和抽象类都是一种类型
(2)一个具体类继承一个抽象类或实现一个接口的时候必须要实现接口或抽象类中全部的抽象方法
(3)一个类继承一个抽象类或实现一个接口的时候,如果仅仅实现了抽象类或接口中部分的抽象方法,这个类必须要声明为抽象类
(4)一个类继承一个抽象类或实现一个接口的时候,如果实现了抽象类或接口中全部的抽象方法,这个类可以声明为抽象类,也可以声明为具体类
(5)接口和抽象类都是属于抽象层的,都是不能实例化的,都有抽象方法
接口和抽象类的不同点
(1)抽象类中可以有实例属性,而接口中没有实例属性。Java系统会给属性自动加上public、static、final修饰符,是公开的静态的常量。公开的静态的常量的命名规则:所有单词的字符都是大写的,不同的单词之间通过_连接
(2)抽象类中可以有实例方法,而接口中没有实例方法。接口中的方法都会被自动的加上public、abstract修饰符,是公开的抽象的方法
(3)抽象类中可以有构造方法,而接口中没有构造方法。接口为什么没有构造方法呢?
因为接口中没有实例属性和实例方法,而实例属性和实例方法又是在创建对象后才生效的,所以不需要创建接口的对象,那么接口就不需要构造方法
(4)在内存中有抽象类的对象;在内存中没有接口的对象。连构造方法都没有不会有对象
(5)抽象类可以使用this,接口不可以使用this
因为this是在实例方法和构造方法中使用的,接口没有实例方法和构造方法,所以没有this
(6)抽象类可以继承一个(具体、抽象)类,而接口不能继承类,接口只能继承接口
(7)类和类之间只能使用单继承,接口和接口之间是多继承
(8)类和类之间使用的是extends,类和接口之间使用的是implements
(9)一个类只能继承一个直接的基类,而一个类可以同时实现多个接口