编程语言中的Interface

207 阅读3分钟

在面向对象的编程语言中大多数提供了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霍格沃兹的干货都很硬核