面向对象编程语言中的接口(Interface)

简介:

  在大多面向对象的编程语言中都提供了Interface(接口)的概念。如果你事先学过这个概念,那么在谈到“接口测试”时,会不会想起这个概念来!?本篇文章简单介绍一下面向对象编程语言中的Interface。

 

 

Java中的Interface                                                                

 

  在Java中定义接口使用interface关键字来声明,可以看做是一种特殊的抽象类,可以指定一个类必须做什么,而不是规定它如何去做。

 

  为什么使用接口?

  大型项目开发中,可能需要从继承链的中间插入一个类,让它的子类具备某些功能而不影响它们的父类。例如 A -> B -> C -> D -> E,A 是祖先类,如果需要为C、D、E类添加某些通用的功能,最简单的方法是让C类再继承另外一个类。但是问题来了,Java 是一种单继承的语言,不能再让C继承另外一个父类了,只到移动到继承链的最顶端,让A再继承一个父类。这样一来,对C、D、E类的修改,影响到了整个继承链,不具备可插入性的设计。

  接口是可插入性的保证。在一个继承链中的任何一个类都可以实现一个接口,这个接口会影响到此类的所有子类,但不会影响到此类的任何父类。此类将不得不实现这个接口所规定的方法,而子类可以从此类自动继承这些方法,这时候,这些子类具有了可插入性。

  我们关心的不是哪一个具体的类,而是这个类是否实现了我们需要的接口。

  接口提供了关联以及方法调用上的可插入性,软件系统的规模越大,生命周期越长,接口使得软件系统的灵活性和可扩展性,可插入性方面得到保证。

  接口在面向对象的 Java 程序设计中占有举足轻重的地位。事实上在设计阶段最重要的任务之一就是设计出各部分的接口,然后通过接口的组合,形成程序的基本框架结构。

  所以简单总结其用途为:实现类的多继承,以解决Java只能单继承,不支持多继承的问题。

  下面通过例子介绍Java中接口的使用。

  定义接口(IAnimal.java):

复制代码
package mypor.interfaces.demo;

public interface IAnimal {

    public String Behavior(); //行为方法,描述各种动物的特性
}
复制代码

 

实现接口一(Dog.java):

复制代码
package mypor.interfaces.demo;
import mypor.interfaces.demo.IAnimal;

//类: 狗
public class Dog implements IAnimal{
    
    public String Behavior()
    {
        String ActiveTime = "我晚上睡觉,白天活动";
        
        return ActiveTime;
    }
}
复制代码

 

实现接口二(Cat.java):

复制代码
package mypor.interfaces.demo;
import mypor.interfaces.demo.IAnimal;

//类:猫
public class Cat implements IAnimal{

    public String Behavior()
    {
        String ActiveTime = "我白天睡觉,晚上捉老鼠。";
        
        return ActiveTime;
    }
}
复制代码

 

测试接口的实现:

复制代码
package mypor.interfaces.demo;
import mypor.interfaces.demo.Dog;
import mypor.interfaces.demo.Cat;


public class Test {
    
    public static void main(String[] args) {         
        //调用dog和cat的行为 
        Dog d = new Dog();
        Cat c = new Cat();
        System.out.println(d.Behavior());
        System.out.println(c.Behavior());
    }
}
复制代码

  注意,这里的测试,并不是测试的接口,因为接口本身只是简单的定义,没什么可测试的,这里真正所测试的是继承接口的类,或者叫已经实例化的对象。

 

 

 

Python中的Zope.interface                                                 

 

  如果你和我一样更熟悉Python,那么是否想知道,Python中是否也有接口(Interface)的概念,Python本身并不提供提口的创建和使用,但是我们可以通过第三方扩展库来使用接口,那就是Zope.interface

  下载地址:https://pypi.python.org/pypi/zope.interface

    来看个普通的例子:

复制代码
class Host(object):

    def goodmorning(self, name):
        """Say good morning to guests"""
        return "Good morning, %s!" % name

if __name__ == '__main__':
    h = Host()
    hi = h.goodmorning('zhangsan')
    print(hi)
复制代码

 

下面在这个例子的基础中使用接口:

复制代码
from zope.interface import Interface
from zope.interface import implements


# 定义接口
class IHost(Interface):

    def goodmorning(self,guest):
        """Say good morning to guest"""


class Host(object):
    implements(IHost)  # 实现接口 

    def goodmorning(self, guest):
        """Say good morning to guests"""
        return "Good morning, %s!" % guest


if __name__ == '__main__':
    h = Host()
    hi = h.goodmorning('zhangsan')
    print(hi)
复制代码

   

  通过看本篇文章的例子,一定觉得接口是个特无聊的概念,我也有这种感觉。哈哈~!当真的碰到具体的用了接口会使结构更优雅的项目时,才会体会到它的意义。

目录
相关文章
|
安全
在钉钉中,Stream 模式审批回调怎么弄?
在钉钉中,Stream 模式审批回调怎么弄?
615 1
|
弹性计算 缓存 安全
阿里云ECS服务器搭建FTP服务
阿里云ECS服务器搭建FTP服务
2643 0
阿里云ECS服务器搭建FTP服务
|
11月前
|
人工智能 缓存 运维
LangServe如何革新LLM应用部署?
LangServe是一款专为LLM部署和管理设计的框架,旨在简化AI服务的开发和运维。它支持多种AI模型,提供高效的推理缓存、安全的访问控制、实时监控和简洁的API接口,帮助开发者从零到一实现LLM应用的快速部署。文中详细介绍了LangServe的功能特点、REST API开发流程及客户端调用测试。
183 2
EMQ
|
传感器 人工智能 安全
EMQX 与 MQTT: AI 大模型时代的分布式数据中枢
在以数据为核心的 AI 时代,基于 MQTT 协议的消息服务器 EMQX 能帮助企业更好的利用人工智能和机器学习模型,是智能化系统中核心的数据基础软件。
EMQ
467 109
|
人工智能 云栖大会
2024云栖大会,我们来了!
2024云栖大会亮点介绍
398 1
|
XML JavaScript 前端开发
JavaScript中的DOM解析器DOMParser api的讲解
`DOMParser`能将XML或HTML源码字符串解析成DOM `Document`。通过`new DOMParser()`创建实例,使用`.parseFromString(string, type)`方法进行解析,其中`string`为待解析的字符串,`type`指定解析类型如`text/html`或`text/xml`等,返回一个`Document`对象。例如,可解析包含`<p>666</p>`的字符串并获取其文本内容`666`。
506 1
|
人工智能 安全 数据挖掘
【2024最新】史上最强AI-GPT4o国内保姆级使用教程
【2024最新】史上最强AI-GPT4o国内保姆级使用教程
543 0
|
弹性计算 Linux 应用服务中间件
手动搭建WordPress(CentOS 8)
WordPress是使用PHP语言开发的博客平台,在支持PHP和MySQL数据库的服务器上,您可以用WordPress架设自己的网站,也可以用作内容管理系统(CMS)。本教程介绍如何在Linux操作系统的ECS实例上搭建WordPress网站。
4352 6
|
机器学习/深度学习 人工智能 安全
「随笔」开源大模型与闭源大模型,你更看好哪一方?
开源与闭源AI模型各有利弊。开源促进创新、透明度和学习,但可能有安全风险和质量不一;闭源则保护IP、提供定制服务,但可能限制创新和透明度。混合策略,如基础开源加高级服务闭源,成为平衡点。选择取决于创新、产权、透明度和商业目标。
444 0