下面小编就为大家带来一篇细数 Java 接口的概念分类及与抽象类的区别小编觉得挺不错的, 现在就分享给大家, 也给大家做个参考一起跟随小编过来看看吧
Java 接口(Interface), 是一系列方法的声明, 是一些方法特征的集合, 一个接口只有方法的特征没有方法的实现, 因此这些方法可以在不同的地方被不同的类实现, 而这些实现可以具有不同的行为(功能)
一接口含义:
1.Java 接口, Java 语言中存在的结构, 有特定的语法和结构;
2. 一个类所具有的方法的特征集合, 是一种逻辑上的抽象
前者叫做 Java 接口, 后者叫做接口
Java 接口本身没有任何实现, 因为 Java 接口不涉及表象, 而只描述 public 行为, 所以 Java 接口比 Java 抽象类更抽象化
Java 接口的方法只能是抽象的和公开的, Java 接口不能有构造器, Java 接口可以有 public, 静态的和 final 属性
二为何用接口 Java 是一种单继承的语言, 若要给已有父类的具体类增加新功能, 在 OCP 原则下, 解决是给它的父类加父类, 或者给它父类的父类加父类, 直到移动到类等级结构的最顶端这样一来, 对一个具体类的可插入性的设计, 就变成了对整个等级结构中所有类的修改
当有了接口, 以上例子中, 就不需要维护整个等级结构中的所有类了.
三接口具胡可插入性:
在一个等级结构中的任何一个类都可以实现一个接口, 这个接口会影响到此类的所有子类, 但不会影响到此类的任何超类此类将不得不实现这个接口所规定的方法, 而其子类可以从此类自动继承这些方法, 当然也可以选择置换掉所有的这些方法, 或者其中的某一些方法, 这时候, 这些子类具有了可插入性(并且可以用这个接口类型装载, 传递实现了他的所有子类)
接口提供了关联以及方法调用上的可插入性, 软件系统的规模越大, 生命周期越长, 接口使得软件系统的灵活性和可扩展性, 可插入性方面得到保证
正是有了接口, 使得 Java 单继承性有了新的扩展的可能 (变向地实现多继承); 三. 类型等级结构 Java 接口(以及抽象类) 一般用来作为一个类型的等级结构的起点
如果一个类已经有了一个主要的超类型, 那么通过实现一个接口, 这个类可以拥有另一个次要的超类型, 这种次要的超类型叫做混合类型
四 Java 接口分类
1 普通接口(含有方法定义)public interface ActionListener{public abstract void actionPerformed(ActionEvent event);}
2 标识接口 (无任何方法和属性定义) 标识接口是没有任何方法和属性的接口. 标识接口不对实现它的类有任何语义上的要求, 它仅仅表明实现它的类属于一个特定的类型
public interface Serializable{};3 常量接口是指用 Java 接口来声明一些常量, 然后由实现这个接口的类使用这些常量
public interface AppConstants{public static final DATA_SOURCE_NAME="test";public static final USER_NAME="test";public static final PASSWORD="test";}
五接口的特点
1Java 接口中的成员变量默认都是 public,static,final 类型的(都可省略), 必须被显示初始化, 即接口中的成员变量为常量(大写, 单词之间用 "_" 分隔)
2Java 接口中的方法默认都是 public,abstract 类型的(都可省略), 没有方法体, 不能被实例化
3Java 接口中只能包含 public,static,final 类型的成员变量和 public,abstract 类型的成员方法
4 接口中没有构造方法, 不能被实例化
5 一个接口不能实现 (implements) 另一个接口, 但它可以继承多个其它的接口
6Java 接口必须通过类来实现它的抽象方法
7 当类实现了某个 Java 接口时, 它必须实现接口中的所有抽象方法, 否则这个类必须声明为抽象类
8 不允许创建接口的实例(实例化), 但允许定义接口类型的引用变量, 该引用变量引用实现了这个接口的类的实例
9 一个类只能继承一个直接的父类, 但可以实现多个接口, 间接的实现了多继承.
六. Java 接口和 Java 抽象类区别面向对象设计的重点在于抽象抽象类与接口都位于继承树的上层
相同点:
1 代表系统的抽象层, 当一个系统使用一颗继承树上的类时, 应该尽量把引用变量声明为继承树的上层抽象类型, 这样可以提高两个系统之间的送耦合 2 都不能被实例化 3 都包含抽象方法, 这些抽象方法用于描述系统能提供哪些服务, 但不包含方法体不同点:
1 最大的一个区别, 就在于 Java 抽象类可以提供某些方法的部分实现, 而 Java 接口不可以; 这大概就是 Java 抽象类唯一的优点吧, 但这个优点非常有用
可以向抽象类里加入一个新的具体方法, 所有的子类都自动得到这个方法; 但 Java 接口里加入一个 新方法, 所有实现这个接口的类就无法成功通过编译, 必需手动给每个实现了该接口的类加上该方法的实现;
2 抽象类的实现只能由子类给出, 也即该实现只能在抽象类定义的继承的等级结构中; 所以抽象类作为类型定义工具的效能大打折扣
Java 接口, 任何一个实现了一个 Java 接口所规定的方法的类都可以具有这个接口的类型, 而一个类可以实现任意多个 Java 接口, 从而这个类就有了多种类型
以上看出: Java 接口是定义混合类型的理想工具, 混合类表明一个类不仅仅具有某个主类型的行为, 而且具有其他的次要行为
3 结合 12 点中抽象类和 Java 接口的各自优势, 具精典的设计模式就出来了:
声明类型的工作仍然由 Java 接口承担, 但是同时给出一个 Java 抽象类, 且实现了这个接口, 而其他同属于这个抽象类型的具体类可以选择实现这个 Java 接口, 也可以选择继承这个抽象类, 也就是说在层次结构中, Java 接口在最上面, 然后紧跟着抽象类, 这下两个的最大优点都能发挥到极至了这个模式就是缺省适配模式
在 Java 语言 API 中用了这种模式, 而且全都遵循一定的命名规范: Abstract +接口名
七. 使用接口和抽象类的总体原则:
1 用接口作为系统与外界交互的窗口站在外界使用者 (另一个系统) 的角度, 接口向使用者承诺系统能提供哪些服务, 站在系统本身的角度, 接口制定系统必须实现哪些服务, 接口是系统中最高层次的抽象类型. 通过接口交互可以提高两个系统之间的送耦合系统 A 通过系统 B 进行交互, 是指系统 A 访问系统 B 时, 把引用变量声明为系统 B 中的接口类型, 该引用变量引用系统 B 中接口的实现类的实例
- public interface B { }
- public class C implements B { }
- public class A { B a = new C(); }
2Java 接口本身必须非常稳定, Java 接口一旦制定, 就不允许随遇更加, 否则对外面使用者及系统本身造成影响 3 用抽象类来定制系统中的扩展点, 抽象类来完成部分实现, 还要一些功能通过它的子类来实现
来源: http://www.phperz.com/article/18/0226/359515.html