特殊现象——接口(interface)

接口——java开发工作者经常挂在嘴边的名词,对于使用python的我来说,往往就代表着url,原因有两:

一是python没有接口概念,另则工作缘故,只接触过web接口测试,坐井观天之势未深入了解,原来接口除了是连接前后端的,还可以是数据传递过程中的类方法或者函数。

Java 接口(interface)

接口使用 interface 关键字来声明,同现实生活常识一致,它规定了可以用来干什么,而不必了解它是怎么做到的,例如冰箱可以用来冷冻,不必了解它如何制冷。

主要特点:
a.接口中只能定义抽象方法,这些方法默认为是 public abstract 的
b.一个接口不实现另一个接口,但可以继承多个其他接口,接口的多继承特点弥补了类的单继承

实现接口的格式如下:
修饰符 class 类名 extends 父类 implements 多个接口 {
    实现方法
}

//串行硬盘接口
public interface SataHdd extends A,B{
    // 连接线的数量
    public static final int CONNECT_LINE = 4;
    // 写数据
    public void writeData(String data);
    // 读数据
    public String readData();
}
interface A{
    public void a();
}
interface B{
    public void b();
}

在java中,通常先定义了一个接口,然后在继承这个接口的类中再写接口的实现方法

1.定义接口(IAnimal.java)

package mypor.interfaces.demo;

public interface IAnimal {

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

2.实现接口

package mypor.interfaces.demo;
import mypor.interfaces.demo.IAnimal;

//类: 狗
public class Dog implements IAnimal{

    public String Behavior()
    {
        String ActiveTime = "我晚上睡觉,白天活动";

        return ActiveTime;
    }
}

//类:猫
public class Cat implements IAnimal{

    public String Behavior()
    {
        String ActiveTime = "我白天睡觉,晚上捉老鼠。";

        return ActiveTime;
    }
}

3.测试继承接口的类

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());
    }
}

注:java的“接口”是一个特例而非普通现象,是对类单继承的补充。

python自定义接口

python里无接口类型,定义接口只是人为的规范,致力于在编程过程自我约束
1.普通类定义接口

 1 >>> class Interface(object):
 2     def A(self):
 3         pass
 4     def B(self):
 5         pass
 6
 7 >>> class realize_interface1(Interface):
 8     def __init__(self):
 9         pass
10     def A(self):        #方法名不必同接口类中一致
11         print ‘实现接口中的A方法‘
12
13 >>> class realize_interface2(Interface):
14     def __init__(self):
15         pass
16     def B(self):
17         print ‘实现接口中的B方法‘
18
19 >>> a = realize_interface1()
20 >>> a.A()
21 实现接口中的A方法
22 >>> b = realize_interface2()
23 >>> b.B()
24 实现接口中的B方法

2.抽象类,抽象方法定义接口

 1 >>> from abc import ABCMeta,abstractmethod  #python没有抽象类、接口的概念,所以要实现这种功能得abc.py 这个类库
 2 >>> class interface(object):
 3     __metaclass__ = ABCMeta #指定这是一个抽象类 ,或者写成 class interface(metaclass = ABCMeta):
 4     @abstractmethod  #抽象方法
 5     def A(self):
 6         pass
 7
 8     def B(self):
 9         pass
10
11 >>> class realize_interface1(interface):
12     def __init__(self):
13         print ‘这是接口interface的实现‘
14     def A(self):
15         print ‘实现A功能‘
16     def B(self):
17         pass
18
19 >>> class realize_interface2(interface):
20     def __init__(self):
21         print ‘这是接口interface的实现‘
22     def A(self):
23         pass
24     def B(self):
25         print "实现B功能"
26
27
28 >>> class realize_interface(interface): #必须实现interface中的所有函数,否则会编译错误
29     def __init__(self):
30         print ‘这是接口interface的实现‘
31     def A(self):
32         print "实现Marlon功能"
33
34 >>> a = realize_interface1()
35 这是接口interface的实现
36 >>> a.A()
37 实现A功能
38 >>> b = realize_interface2()
39 这是接口interface的实现
40
41 >>> c = realize_interface()
42
43 Traceback (most recent call last):
44   File "<pyshell#148>", line 1, in <module>
45     c = realize_interface()
46 TypeError: Can‘t instantiate abstract class realize_interface with abstract methods B
47
48 >>> f = interface()   #抽象类不能直接实例化
49
50 Traceback (most recent call last):
51   File "<pyshell#152>", line 1, in <module>
52     f = interface()
53 TypeError: Can‘t instantiate abstract class interface with abstract methods A

从上面可以看出要继承抽象类的接口,需要把其中的每个方法全部实现,否则会报编译错误;另外python允许多继承,故而接口在python中并没有那么重要。

python第三方扩展库接口

Python本身并不提供提口的创建和使用,但是我们可以通过第三方扩展库来使用接口,那就是Zope.interface

 1 from zope.interface import Interface
 2 from zope.interface import implements
 3
 4
 5 # 定义接口
 6 class IHost(Interface):
 7
 8     def goodmorning(self,guest):
 9         pass
10
11 class Host(object):
12     implements(IHost)  # 实现接口
13
14     def goodmorning(self, guest):
15         return "Good morning, %s!" % guest
16
17 if __name__ == ‘__main__‘:
18     h = Host()
19     hi = h.goodmorning(‘ryana‘)
20     print(hi)

运行结果:

Good morning,ryana!

参考:http://www.weixueyuan.net/view/6009.html

http://www.cnblogs.com/fnng/p/5259786.html

时间: 2024-10-11 11:41:46

特殊现象——接口(interface)的相关文章

JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展

JAVA之旅(七)--final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 OK,我们继续学习JAVA,美滋滋的 一.final 我们来聊聊final这个关键字 final可以修饰类,方法和变量 final修饰的类不可以被继承 final修饰的方法不可以被覆盖 final修饰的变量是一个常量,只能被赋值一次 内部类只能访问被final修饰的局部变量 final,故名思意,就是最终的意思,由以上的五种特性,不过final的出现,也是有

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

接口 Interface

interface 关键字 声明接口 接口中的成员默认都是public 能力不一样的时候适合用接口 using System; using System.Collections; using System.Collections.Generic; namespace Dome { class dom { static void Main(string[] args) { play iplay = new student(); iplay.iplay(); Console.WriteLine();

Android中接口(Interface)的简单使用

  Android中接口(Interface)的简单使用 Java中的接口可以被看作是只包含常量和抽象方法的抽象类 . 可以使用如下方式定义一个接口: public interface InterfaceDemo { int i = 10; void method1(); int method2(); } 使用1: 解决“多重继承”的问题 Java语言本身是不支持类的多重继承(多重继承是指一个类从多个类继承而来,即一个类拥有多个超类)的,但一个类却可以实现多个接口.这样,我们可以将一些抽象方法定

C++里的接口(Interface)

C++是允许多重继承的,而这个设计既会引起问题又不是很常用,于是java和C#都采用了另一种方式:接口(Interface).类继承(实现)接口并不表明 is-a关系,而是“有某种功能”.“符合某种性质”的关系.C++虽然语法上不支持接口,但是这个思路还是可以拿来用的嘛.比如设计这样一个接口: struct hashable { virtual size_t hash_code() = 0; }; 然后让一个类继承它,并实现函数,就代表了该类是可哈希的. 事情没这么简单,在C++里,接口还可以有

C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较

由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针类型来判断的).纯虚函数是一种在父函数中只定义而不实现的一种函数,不能用来声明对象,也可以被称为抽象类.纯虚函数的实现也可以在类声明外进行定义.C++中的抽象类abstract class是指至少有一个纯虚函数的类,如果一个类全部由纯虚函数组成,不包括任何的实现,被称为纯虚类. Java中的普通函数

认识接口(Interface)设计

by 高煥堂 认识接口(Interface)设计 1.两种接口:主动型与被动型  就软件主板(MB)设计(开发)者而言,反向调用的接口(如<I>)能让主板获得主控权,所以又称为主动型接口或强势型接口.而正向调用的接口(如CI接口)则让子类或Client类获得主控权,所有(从主板视角而言)又称为被动型接口. 无论是主动型或被动型接口都是主板的基类(或称为父类)所提供的,但是这两种接口对于子类(或Client类)的制约能力并不相同,主动型接口让基类具有强大的制约能力(所以称为强势接口),可以主导子

Java简明教程 09. 抽象类(abstract class)和接口(interface)

抽象类(abstract class) 描述抽象的事物,  比如人类(human), 就是一个抽象类. 对于人类这个抽象类, 具体的就是某一个人, 比如张三(男)啊, 小红(女)啊,虽然说人都会eat, 可是男人和女人的eat似乎又是不一样的.男人一般都是大口大口的吃, 而女人比较慢条斯理. AbstractDemo.java 1 abstract class Human { //抽象类, 特点: 1. 前面有abstract修饰 2 // 2. 无法直接生成一个对象,需要子类去继承这个类, 并

PHP接口(interface)和抽象类(abstract)

interface 定义了一个接口类,它里面的方法其子类必须实现.接口是类的一个模板,其子类必须实现接口中定义的所有方法. interface User{ function getHeight($height); function getWeight($weight); } class my implements User{ function getHeight($username){ echo $height; } function getWeight($weight){ echo $weig