在面向对象的编程语言中大多数提供了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地址:pypi.python.org/pypi/zope.i…
先来看个普通的例子
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霍格沃兹的干货都很硬核