接口的实现

转载 2007年09月25日 09:09:00
接口的实现
案例
interface IControl
    {
        
void Paint();
    }
    
interface IDataBind
    {
        
void Bing(int d);
    }
    
public class Control:IControl
    {
        
public void Paint()
        {;}
    }
    
public class EditBox:Control,IControl,IDataBind
    {
        
public void IControl.Paint()
        {;}
        
public void Bing(int i)
        {;}
        
    }
  
这里类EditBox继承了类Control,接口IControl,IDataBind,在声明成员中,显示的指定了IControl的Paint方法,
显示接口成员只能通过接口调用
改写上面的例子如下
 
public class EditBox:IControl,IDataBind
     {
         void IControl.Paint()
         {;}
         public void Bing(int i)
         {;}
        
     }
     class test1
     {
         static void Main()
         {
              EditBox editbox = new EditBox();
              IControl Control=editbox;
              Control.Paint();
         }
     }
 
无法使用editbox.Paint(), 是因为EditBox类中并没有包含Paint方法的定义,要访问Paint(),必须把类的变量赋值拥有此方法接口的变量,然后通过Control.Paint()进行调用
值得注意的是,接口本身不提供所定义的成员的实现,它仅仅说明这些成员,这些成员必须依靠实现接口的类或其他接口支持.
 
显示接口执行体
类似于上面例子的
void IControl.Paint()
{;}
IControl.Paint就是显示接口执行体,不能在方法调用,属性访问,以及索引指示器访问中显示的调用接口执行体,事实上,显示接口执行体只能通过接口实例,仅仅引用接口的成员名称来访问
 
显示接口成员执行体不能使用任何修饰符,比如public,abstract,virtual等
显示接口成员执行体和其他成员有着不同的访问方式.因为不能在方法调用,属性访问以及索引指示器访问中通过全名访问,所以显示接口成员执行体在某种程度上是私有的,但它又可以通过接口实例访问,又具备一定的公有性,使用显示接口成员执行体通常只有两个目的
1,因为显示接口成员执行体不能通过类实例进行访问,这就可以从公有接口中把接口实现部分单独分离出来,如果一个类只在内部使用该接口,而类的使用者不会使用到该接口,这种显示接口执行体就可以起到作用
2,显示接口执行体避免了接口成员之间因为同名而发生混淆.如果一个类希望对名称和返回类型相同的接口成员采用不同的实现方式,就必须使用显示接口执行体,如果没有使用它,那么对于名称和返回类型不同的接口成员,类也无法进行实现.
 
 只有类在声明时候,把接口名写在基类列表中,而且类中声明的全权名,类型,返回类型都与显示接口执行体一致时,显示接口成员执行体才有效
 
 
interface IControl
     {
         void Paint();
     }
     interface IDataBase
     {
         void Read();
     }
     class test:IControl
     {
         void IControl.Paint();
     }
 
因为类test从接口IControl继承,所以基类列表中包含Paint,所以可以使用显示接口成员执行体,但如果是
Void IDataBase.Read()则出错,因为并没有继承此接口,而且基类中也没有此接口成员
再例
     interface IControl
     {
         void Paint();
     }
     class test:IControl
     {
         void IControl.Paint()
         {}
     }
     class test2:test
     {
         void IControl.Paint()   //编译报错
         {}
     }
虽然类test2继承了类test但是接口IControl并没有显示的出现在基类列表中,照样不能使用
再例如
     interface IControl
     {
         void Paint();
     }
     interface test:IControl
     {
         void getdata();
     }
     class test2:test
     {
         void IControl.Paint()
         {}
         void test.getdata()
         {}
     }
这里注意的是,接口继承于接口,与类继承于接口有些不同,因为类继承于接口,必须提供接口的实现方法,而接口继承于接口可以不必,所以同样的例子,test2继承于接口test就可以显示使用隐式继承来的IControl.Paint成员

 

接口实现多态

由于继承有单根性这一个特点,也就是说一个类只能继承与一个父类,但是有时候我们需要继承多个类,那莪这样就有了接口的出现, 接口实现让一个类可以继承多个类,继承的多个类实际上就是继承的接口接口使用int...
  • NextStand
  • NextStand
  • 2016年05月26日 21:52
  • 3919

java 的接口可以实现接口吗?抽象类呢?

面试中可能会遇到这样的问题: 1.接口可以实现接口吗? ans:不可以. 2.抽象类可以实现接口吗? ans:可以...
  • jianjun4833
  • jianjun4833
  • 2017年05月15日 15:52
  • 2653

抽象类、接口的区别 和 抽象类可以不实现接口的全部方法

抽象类和接口的区别   抽象类里面可以有非抽象的方法,接口里只能有抽象方法。   抽象类中的抽象方法声明时不能有大括号,而接口中的所有方法都没有大括号。    抽象类(abstract...
  • taoshengyijiuzt
  • taoshengyijiuzt
  • 2015年06月16日 20:58
  • 1642

集合的概念、类型、接口以及接口的实现类的方法描述

集合是包含多个对象的简单对象,所包含的对象称为元素。集合里面可以包含任意多个对象,数量可以变化;同时对对象的类型也没有限制,也就是说集合里面的所有对象的类型可以相同,也可以不同。 集合和数组比较: ...
  • wangjian_an
  • wangjian_an
  • 2016年03月21日 11:49
  • 1665

C#隐式实现接口成员与显示实现接口成员

对C#隐式实现接口成员与显示实现接口成员的简单说明
  • sirenxiaohuayuan
  • sirenxiaohuayuan
  • 2015年12月29日 14:50
  • 828

C++接口继承与实现继承的区别和选择

1.接口继承与实现继承的区别《Effective C++》条款三十四:区分接口继承和实现继承中介绍的比较啰嗦,概括地说需要理解三点: (1)纯虚函数只提供接口继承,但可以被实现; (2)虚函数既提...
  • K346K346
  • K346K346
  • 2017年02月13日 16:34
  • 628

什么是接口,实现接口时有几个原则?

1、Throwable接口中的getStackTrace()方法(或者Thread类的getStackTrace()方法),根据这个方法可以得到函数的逐层调用地址,其返回值为StackTraceEle...
  • Javalzh1992_
  • Javalzh1992_
  • 2017年01月07日 14:10
  • 614

接口技术实现方式

现在管理软件项目中接口需求很多,很多项目接口实现得并不理想,原因就在于接口协议质量不高,而接口协议是和接口调研紧密相关的。一般接口调研和其它调研方法是一样的,但要做好接口调研就必须具备一定的专业知识,...
  • xiaokui008
  • xiaokui008
  • 2014年09月04日 10:05
  • 5690

从头认识java-7.4 实现多重接口

这一章节我们来说一下接口另一个特性:多重接口。在平常,使用继承,我们只是继承某一类,只能够一种向上转型,但是在接口的使用方面,可以实现多个接口,然后实现多种的向上转型。 我们先上代码:package ...
  • raylee2007
  • raylee2007
  • 2015年11月08日 23:16
  • 3449

C++设计:接口与实现分离

C++中的接口 C++中的接口一般设计为不包含成员变量的抽象类,这样就只有接口的功能。 如果接口类中包含了成员变量,那么势必会给派生带来麻烦。 不好的设计:接口与实现混合 class Shape { ...
  • ClamReason
  • ClamReason
  • 2016年12月09日 10:00
  • 1026
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:接口的实现
举报原因:
原因补充:

(最多只允许输入30个字)