在面向对象的编程语言中大多数提供了 Interface(接口)的概念。
Java 中的 Interface
接口在 Java 编程语言中是指一个抽象类型,是抽象方法的集合,通常以 interface 来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口并不是类,虽然编写接口的方式和类很相似,但是他们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
1.为什么使用 Interface?
接口的特点在于它只是定义规范,而不管具体实现,具体实现由接口的实现者完成。
例如,当前有多个主流的数据库厂商(Oracle、SQL Server、DB2 等),Java 定义了调用函数的接口规范(JDBC 即 Java 数据库连接,是一种用于执行 SQL 语句的 JavaAPI,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成),不同的数据库厂商需要根据接口实现自己的数据库调用。对于 Java 程序员来说,在调用不同的数据库时只需要用 JDBC,而并不需要关心每个数据库是怎么实现接口的。
下面通过例子来介绍 Java 中接口的使用。
定义接口
package test.demo;
public interface IAnimal {
public String Behavior();//行为方法,描述各种动物的特性
}
复制代码
实现动物接口(Dog 类)。
package test.demo;
//类:狗
public class Dog implements IAnimal {
@Override
public String Behavior() {
String ActiveTime = "我晚上睡觉,白天活动";
ruturn ActiveTime;
}
}
复制代码
实现动物接口(Cat 类)
package test.demo;
//类:猫
public class Cat implement IAnimal{
@Override
public String Behavior() {
String ActiveTime = "我白天睡觉,晚上捉老鼠。";
return ActiveTime;
}
}
复制代码
测试动物接口的具体实现(Dog 类和 Cat)
package test.demo;
public class Test{
public static viod main (String[] args){
//调用dog和cat的行为
Dog dog = new Dog();
Cat cat = new Cat();
System.out.printIn(dog.Behavior());
System.out.printIn(dog.Behavior());
复制代码
需要说明的是,这里的测试并不是测试的接口,因为接口本身只是抽象的定义,并没有可测试性,这里所测试的是已经实现了接口的类。
Python 中的 Zope.interface
在 Python 语言中也有 Interface 的概念,虽然 Python 本身并不提供 Interface 的创建和使用,但是我们可以通过第三方扩展库来使用类似 Interface 的概念,这里选用 Zope.interface 库。
PyPI 地址:https://pypi.python.org/pypi/zope.interface
先来看个普通的例子
class Host(object)
def goodmoring(self, name):
"""Say good morning to guests"""
return "Good morning, %s!" % name
if _name_ == '_main_':
h = Host()
hi = h.goodmorning('zhangsan')
print(hi)
复制代码
下面在这个例子的基础上使用 Interface(只使用 Python3)
from zope.interface import Interface
from zope.interface.declarations import implementer
#定义接口
class IHost(Interface):
def goodmorning(self ,host):
"""Say good morning to host"""
@implementer(IHost) # 继承接口
class Host:
def goodmoring(self,guest):
"""Say good morning to guest"""
return "Good morning, %s!" % guest
if _name_ '_main_':
p = Host()
hi = P.goodmorning('Tom')
print(hi)
复制代码
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论