抽象类VS接口
Posted tiantongtong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类VS接口相关的知识,希望对你有一定的参考价值。
抽象方法:
抽象方法没有方法体;抽象方法必须在抽象类里;抽象方法必须在子类中被实现,除非子类是抽象类。(实例化没有意义就可以定义为抽象类)
抽象类:
不能被实例化(但可以创建一个引用变量,其类型是一个抽象类,指向非子类实例),抽象方法必须在抽象类里;抽象类中不一定有抽象方法;一个抽象类的抽象方法必须被子类实现,除非子类也是抽象类。
关键字:abstract;
注意:没有抽象构造方法,也没有抽象静态方法;抽象类里可以有非抽象方法,创建子类的实例时可以调用
接口
关键字:interface
语法:
修饰符 interface 接口名称[externds 其他接口名]{
//声明变量
//声明方法
}
1.解决单根继承,系统对外提供的所有服务
接口特性;
接口中的变量都是静态常量(public static fianl),必须显式初始化。
接口中所有的方法默认都是public absract
接口没有构造方法,不可以被实例化,但可以被实现。
接口里可以声明(并且可以提供实现)静态方法
接口中的静态方法必须的是public 的,public修饰符可以省略,static修饰符不能省略;静态方法不能被继承及覆盖,所以被具体 所在的接口调用;接口中静态方法可以有多个
接口可以有默认方法,接口中可以定义默认法方法default,就可以有方法体,默认方法会被直接继承,通过实例直接调用。如果一个类实现了多个接口,多个接口都定义了多个同样的默认方法
方案一:实现类需要覆盖重写接口中的默认方法不然会报错
方案二:可以使用super来调用指定接口的默认方法
如果一个类继承了抽象类,实现了一个接口,抽象类和接口存在相同的方法(采取类优先的原则,优先继承抽象类的方法)
默认接口可以有多个
默认方法的好处解决了接口与其实现类之间耦合度过高,修改接口,所有实现类必须随之修改的问题
实现类可以实现多个接口;
关键字:implements,多个接口使用逗号隔开
总结;一个类通过实现接口的方式,从而来继承接口的抽象方法;
一个类只能继承 一个类,但可以实现多个接口;
一个接口不能实现另一个接口,但可以继承多个其他接口。
抽象类和接口
相同点:代表系统的抽象层
都不能被实例化
都能包含抽象方法(用于描述系统提供的服务,不必提供具体实现)
不同点:在抽象类中可以为部分普通方法提供默认实现
一个类只能继承一个直接的父类,但可以实现多个接口
抽象类和接口使用原则:
is-a抽象类;has-a接口
接口做系统与外界交互的窗口(接口提供服务)
接口本身一旦制定,就不允许随意修改
抽象类可以完成部分功能的实现,还有部分功能可以作为系统的扩展点
抽象类便于复用,接口便于功能扩展和维护
以上是关于抽象类VS接口的主要内容,如果未能解决你的问题,请参考以下文章
Java中抽象类和接口的区别(abstract class VS interface)