JavaSE_8系列博客——Java语言的特性(五)--接口和继承(5)--深入理解,并优化接口
2017-06-26 09:02
826 查看
考虑一个你开发的接口叫做DoIt:
假设在以后的时候,你要添加第三种方法到DoIt,这样接口现在变成:
如果进行此更改,那么实现旧DoIt接口的所有类将因为不再实现旧接口而中断。依靠这个接口的程序员会大声抗议。
尝试预测您的接口的所有用途,并从头开始完全规定好。如果要向接口添加其他方法,则有几个选项。您可以创建一个扩展DoIt的DoItPlus接口:
注意:这里其实,是体现了面向对象中设计模式里边的一个开闭原则,更好的能够实现程序的灵活性和可扩展性、稳定性和可维护性。
现在,使用您的代码的用户可以选择继续使用旧接口或升级到新接口。
或者,您可以将新方法定义为默认方法。以下示例定义了一个名为didItWork的默认方法:
请注意,您必须提供默认方法的实现。您还可以为现有接口定义新的静态方法。具有实现使用新的默认或静态方法增强的接口的类的用户不必修改或重新编译以适应其他方法。
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); }
假设在以后的时候,你要添加第三种方法到DoIt,这样接口现在变成:
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); boolean didItWork(int i, double x, String s); }
如果进行此更改,那么实现旧DoIt接口的所有类将因为不再实现旧接口而中断。依靠这个接口的程序员会大声抗议。
尝试预测您的接口的所有用途,并从头开始完全规定好。如果要向接口添加其他方法,则有几个选项。您可以创建一个扩展DoIt的DoItPlus接口:
public interface DoItPlus extends DoIt { boolean didItWork(int i, double x, String s); }
注意:这里其实,是体现了面向对象中设计模式里边的一个开闭原则,更好的能够实现程序的灵活性和可扩展性、稳定性和可维护性。
现在,使用您的代码的用户可以选择继续使用旧接口或升级到新接口。
或者,您可以将新方法定义为默认方法。以下示例定义了一个名为didItWork的默认方法:
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); default boolean didItWork(int i, double x, String s) { // Method body } }
请注意,您必须提供默认方法的实现。您还可以为现有接口定义新的静态方法。具有实现使用新的默认或静态方法增强的接口的类的用户不必修改或重新编译以适应其他方法。
相关文章推荐
- javaSE_8系列博客——Java语言的特性(五)--接口和继承(4)--使用接口作为类型
- javaSE_8系列博客——Java语言的特性(五)--接口和继承(2)--定义接口
- javaSE_8系列博客——Java语言的特性(五)--接口和继承(1)--宏观把控
- javaSE_8系列博客——Java语言的特性(五)--接口和继承(3)--实现接口
- JavaSE_8系列博客——Java语言的特性(五)--接口和继承(6)--默认方法的使用场景
- javaSE_8系列博客——Java语言的特性(一)--关于面向对象基本概念的理解(2)--对象
- javaSE_8系列博客——Java语言的特性(三)--类和对象(13)--理解类的成员
- javaSE_8系列博客——Java语言的特性(一)--关于面向对象基本概念的理解(1)
- javaSE_8系列博客——Java语言的特性(三)--类和对象(7)--给方法或者构造器传输信息
- javaSE_8系列博客——Java语言的特性(三)--类和对象(2)--类(宏观概述)
- javaSE_8系列博客——Java语言的特性(三)--类和对象(1)--概述
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(7)-- 流程控制语句
- javaSE_8系列博客——Java语言的特性(三)--类和对象(6)--为你的类提供构造函数
- javaSE_8系列博客——Java语言的特性(三)--类和对象(11)--从方法返回值
- javaSE_8系列博客——Java语言的特性(三)--类和对象(17)--嵌套类(本地/局部类)
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(5)-- 运算符
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(6)-- 表达式、语句、块
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(2)-- 变量和常用数据类型
- C# 语言特性系列(3) 深入理解继承
- javaSE_8系列博客——Java语言的特性(三)--类和对象(14)--初始化字段