接口意义

首先,我们必须明确,接口是一个类。

 

“接口是一个特殊的类,又是一个特别有意义的类,不是因为它的特殊,而是因为它的意义,叫它接口更合适,但不能忘了,它仍是类。”

 

“接口是一个只有声明,没有实现的类。”

 

很多人纠结于接口只是一个标准,是一个契约,而忘记了它的意义。

 

下面我们来看这样一个问题:

话说有家影视公司选拔偶像派男主角,导演说了,男演员,身高是王道。于是有下面代码:

 

public  class  Actor
{
     private  string  name;
     private  int  height;
 
     public  Actor( string  name, int  height)
     {
         this .name = name;
         this .height = height;
     }
     public  string  Name
     {
         get  { return  this .name; }
     }
     public  int  Height
     {
         get  { return  this .height; }
     }
     
     public  int  CompareTo( object  obj)
     {
         return  this .height - ((Actor)obj).height;
     }
 
     public  string  GetName()
     {
         return  this .name;
     }
}

 

 

这个类,除了可以存放男演员的基本信息,还定义了一个函数publicint CompareTo(object obj),因为,我们要比较男演员的身高,用身高判断哪个演员更好。

有了这个类,后面,你可以比较轻松地编写代码,判断是刘德华更优秀,还是潘长江更优秀了,这个代码,我这里就略过去了….

 

(儿童不宜,此处省略1000行)……………….

 

 

现在的问题是,明天又要选拨女演员了,导演说了,女演员,苗条是王道。女演员的这个类,你肯定是要做的,只是….

 

只是,我刚才略过去的,让你编写的代码,你是不是还要再重新编写呢????

 

这等于又重新编写了一个程序。

 

这时,我们就想到了接口,我们来接着看代码吧:

我先做一个接口:

 

using  System;
 
namespace  WestGarden.IDAL
{
     public  interface  ISelectPlayer
     {
         string  GetName();
 
         int  CompareTo( object  obj);
     }
}

 

 

这个接口,定义了两个函数,一个,当然是要进行比较,标准由你定,你说是导演定的,那更好,不用你费脑子了。

 

我们把刚才做的男演员的类,按照这个接口的标准来实现,也就是继承这个接口:

 

using  System;
 
using  WestGarden.IDAL;
 
namespace  WestGarden.DAL
{
     public  class  Actor:ISelectPlayer
     {
         private  string  name;
         private  int  height;
 
         public  Actor( string  name, int  height)
         {
             this .name = name;
             this .height = height;
         }
         public  string  Name
         {
             get  { return  this .name; }
         }
         public  int  Height
         {
             get  { return  this .height; }
         }
        
         public  int  CompareTo( object  obj)
         {
             return  this .height - ((Actor)obj).height;
         }
 
         public  string  GetName()
         {
             return  this .name;
         }
     }
}

 

 顺手,把女演员的类也做了吧:

 

using  System;
 
using  WestGarden.IDAL;
 
namespace  WestGarden.DAL
{
     public  class  Actress:ISelectPlayer
     {
         private  string  name;
         private  int  weight;
         
         public  Actress( string  name, int  weight){
             this .name = name;
             this .weight = weight;
         }
 
         public  string  Name
         {
             get  { return  this .name; }
         }
         public  int  Weight
         {
             get  { return  this .weight; }
         }
 
   
         public  int  CompareTo( object  obj)
         {
             return  ((Actress)obj).weight - this .weight;
         }
 
         public  string  GetName()
         {
             return  this .name;
         }
     }
}

 

这时,我们在应用层这样编写代码:

 

using  System;
 
using  WestGarden.IDAL;
using  WestGarden.DAL;
 
namespace  WestGarden.Web
{
     public  partial  class  Select : System.Web.UI.Page
     {
         protected  void  Page_Load( object  sender, EventArgs e)
         {
             Actor actor1 = new  Actor( "潘长江" , 150);
             Actor actor2 = new  Actor( "刘德华" , 180);
 
             Actress actress1 = new  Actress( "巩俐" , 120);
             Actress actress2 = new  Actress( "周迅" , 80);
 
             Response.Write( "最佳男演员是:" +WhoIsBetter(actor1, actor2)+ "</br>" );
             Response.Write( "最佳女演员是:" +WhoIsBetter(actress1, actress2)+ "</br>" );
         }
 
         //这里就象一个USB口一样工作着,无论你插上的是男演员、女演员...,只要它继承的是ISelectPlayer接口。
         public  string  WhoIsBetter(ISelectPlayer a, ISelectPlayer b)
         {
             if  (a.CompareTo(b) > 0)
                 return  a.GetName();
             else
                 return  b.GetName();
         }
     }
}

  

注意:

我们做的这个函数,publicvoid WhoIsBetter(ISelectPlayer a,ISelectPlayer b)

 

这个函数,形参是ISelectPlayer,是接口,我认为,接口的意义,就在这里。

 

你实现接口的类是男演员也好,女演员也好,男主角也好、女主角也好、男配角也好、女配角也好、男群众演员也好、女群众演员也好,只要你继承的是我这个ISelectPlayer,或者,你习惯于说,遵守了我这个接口的标准、或者契约,我这段代码,都不需要改变!!

 

这和那个比方是一样的,不管你插在USB接口的是U盘,还是移动硬盘,还是什么mp3,还是mp4,还是你新发明的什么东西,只要你能插在我的USB口上,我主机都不需要做任何改变,直接在上面读取或者写入数据。

 

这个,是硬件接口的意义所在,也是我们这个ISelectPlayer类的意义所在,因为它有了这个伟大的意义,才把它改叫为接口的,因为,它象USB接口一样工作着……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值