面向对象的接口

      面向对象的接口
  在C++中,一个类被允许继承多个类。但是在Java以后的语言不被允许。
  这样,如果想继承多个类时便非常困难。所以开发方想出了新办法:接口。
  一个接口内,允许包含变量、常量等一个类所包含的基本内容。但是,接口中的函数不允许设定代码,也就意味着不能把程序入口放到接口里。由上可以理解到,接口是专门被继承的。接口存在的意义也是被继承。和C++里的抽象类里的纯虚函数是相同的。不能被实例化。
  定义接口的关键字是interface,例如:
  public interface MyInterface{
  public void add(int x,int y);
  public void volume(int x,int y,int z);
  }
  继承接口的关键字是implements,相当于继承类的extends。
  需要注意的是,当继承一个接口时,接口里的所有函数必须全部被覆盖。例如:
  class Demo implements MyInterface{
  public void add(int x,int y){
  System.out.println(" "+(x+y));
  }
  public void volume(int x,int y,int z){
  System.out.println(" "+(x*y*z));
  }
  public static void main(String args[]){
  Demo d=new Demo();
  d.add(10,20);
  d.volume(10,10,10);
  }
  }
  输出结果:
  30
  1000
  当想继承多个类时,开发程序不允许,报错。这样就要用到接口。因为接口允许多重继承(,),而类不允许。所以就要用到接口。
   Java里面的接口
  Java里面由于不允许多重继承,所以如果要实现多个类的功能,则可以通过实现多个接口来实现。
  Java接口和Java抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现。OOP面向对象的编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口的编程,面向抽象的编程,正确地使用接口、抽象类这些太有用的抽象类型做为你结构层次上的顶层。
  Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了。
  1、Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。
  2、一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。
  3、从第2点不难看出,Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。

c#中的接口

  C# 语言参考
  接口(C# 参考)
  定义:接口是一种约束形式,其中只包括成员定义,不包含成员实现的内容。
  目的:接口的主要目的是为不相关的类提供通用的处理服务,由于C#中只允许树形结构中的单继承,即一个类只能继承一个父类,所以接口是让一个类具有两个以上基类的唯一方式。
  接口只包含方法、委托或事件的签名。方法的实现是在实现接口的类中完成的,如下面的示例所示:
  interface ISampleInterface
  {
  void SampleMethod();
  }
  class ImplementationClass : ISampleInterface
  { //实现接口成员。
  void ISampleInterface.SampleMethod()
  { //方法实现。
  static void Main()
  { // 定义一个接口的实例变量 obj。
  ISampleInterface obj = new ImplementationClass();
  //调用(obj)的成员方法。
  obj.SampleMethod();
  }
  }
  }
  备注
  接口可以是命名空间或类的成员,并且可以包含下列成员的签名:
  方法属性索引器事件一个接口可从一个或多个基接口继承。
  当基类型列表包含基类和接口时,基类必须是列表中的第一项。
  实现接口的类可以显式实现该接口的成员。显式实现的成员不能通过类实例访问,而只能通过接口实例访问,例如:
  有关显式接口实现的更多详细信息和代码示例,请参见显式接口实现(C# 编程指南)。
  示例
  下面的示例演示了接口实现。在此例中,接口 IPoint 包含属性声明,后者负责设置和获取字段的值。Point 类包含属性实现。
  复制
  // keyword_interface_2.cs
  // Interface implementation
  using System;
  interface IPoint
  {
  // Property signatures:
  int x{get; set;}
  int y{get; set;}
  }
  class Point : IPoint
  {
  // Fields:
  private int _x;
  private int _y;
  // Constructor:
  public Point(int x, int y)
  {
  _x = x;
  _y = y;
  }
  // Property implementation:
  public int x
  {
  get { return _x; }
  set { _x = value; }
  }
  public int y
  {
  get { return _y; }
  set { _y = value; }
  }
  }
  class MainClass
  {
  static void PrintPoint(IPoint p)
  {
  Console.WriteLine("x={0}, y={1}", p.x, p.y);
  }
  static void Main()
  {
  Point p = new Point(2, 3);
  Console.Write("My Point: ");
  PrintPoint(p);
  }
  输出My Point: x=2, y=3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值