Java和C#中的接口对比(有你不知道的东西)

Java和C#中的接口对比(有你不知道的东西)

1.与Java不同,C#中的接口不能包含字段(Field)。

在java中,接口中可以包含字段,但是这些字段隐式地是static和final的。而C#不允许接口中有字段,编译器在编译时就会提示错误(如下代码所示)。
interface IInterface            
    {
        int a ;//编译器错误提示:接口不能包含字段
    }

2、在C#和Java中,接口内的所有方法默认都是公用方法。

在Java中,方法声明可以带有public修饰符(即使这并非必要),但在C#中,显式地为接口中的方法指定public修饰符是非法的。例如,下面的代码将产生一个编译错误。 
interface IInterface
    {
        public int add();//错误提示:修饰符“public”对该项无效
    }

3、C#中特有的实现接口和显式实现接口.

普通实现接口

interface IInterface
    {
        int add(int a,int b) ;
    }
    class Program:IInterface
    {
        static void Main(string[] args)
        {
            Program ii = new Program();     //使用实体类来访问自己的接口函数
            Console.WriteLine(ii.add(1, 2));//正确运行,没有提示错误
        }

        public int add(int a, int b)
        {
            return a + b;
        }
    }

 
显示地实现接口

interface IInterface
    {
        int add(int a,int b) ;//编译器错误提示:接口不能包含字段
    }
    class Program:IInterface
    {
        static void Main(string[] args)
        {
            Program newProgram = new Program();
            newProgram.add(1, 2);//编译器提示错误:“ConsoleApplication3.Program”不包含“add”的定义,
                                 //并且找不到可接受类型为“ConsoleApplication3.Program”的第一个参数的扩展方法“add”(是否缺少 using 指令或程序集引用?)
        }

        int IInterface.add(int a, int b)//显示实现接口,注意这个方法多了IIterface限定符
        {
            return a + b;
        }
    }

另外,我们注意到显式实现接口后int IInterface.add(int a, int b)中少了public修饰符,但是我们一加上编译器又会提示错误:“修饰符“public”对该项无效”。另外因为是Program类访问自身的方法,所以访问性也不是构成add()方法无法访问的原因。

如果我们将main()函数中的代码修改一下,将new Program()的变量赋给IIterface的引用,再看看结果如何

static void Main(string[] args)
        {
            IInterface ii = new Program();
            Console.WriteLine(ii.add(1, 2));//正确运行,没有提示错误
        }

从以上结果,我们可以看出如果是显示实现接口,那么对接口中方法的访问必须要通过接口类型的引用,用显示实现了接口的类是没有办法使用的。

显式接口成员实现的两个主要用途

· 由于显式接口成员实现不能通过类或结构实例来访问,因此它们就不属于类或结构的自身的公共接口。当需在一个公用的类或结构中实现一些仅供内部使用(不允许外界访问)的接口时,这就特别有用。

· 显式接口成员实现可以消除因同时含有多个相同签名的接口成员所引起的多义性。如果没有显式接口成员实现,一个类或结构就不可能为具有相同签名和返回类型的接口成员分别提供相应的实现,也不可能为具有相同签名和不同返回类型的所有接口成员中的任何一个提供实现。

时间: 2024-07-28 16:07:36

Java和C#中的接口对比(有你不知道的东西)的相关文章

Java和Android中的接口

Java中的接口就是一个只有全局常量和抽象方法的类,它就是一个空想家,只知道要做什么事却不知道具体怎么做.怎么办?它就去雇佣一个实干家,让他把自己想的事情做完.接口类:空想家实现类:实干家若仅仅是这样的关系,那为啥不让实干家去想事情并自己干完呢?空想家有啥用?这就是回答接口作用的问题了:举个栗子,在很多实际开发中,作为开发商一般不会直接做一个产品去卖给客户,而是先等客户来了,谈好具体需求了再去做开发,那客户也不能把所有想到的需求都让开发商去做啊,所以开发商就制定了一些能力范围内的标准,就是公布客

Java集合框架中List接口的简单使用

Java集合框架可以简单的理解为一种放置对象的容器,和数学中的集合概念类似,Java中的集合可以存放一系列对象的引用,也可以看做是数组的提升,Java集合类是一种工具类,只有相同类型的对象引用才可以放到同一个集合中,否则是不能放进去的: 集合可以对元素进行简单快速的查找.插入.删除操作 某些集合可以有<key value>映射的关系 数组的长度是固定的,而集合的长度是跟随元素的个数动态变化的,灵活性和扩展性都比数组更加优越 数组只能存放基本类型的数据,而集合存放的是对象引用类型的 数组只能通过

Java集合框架中Map接口的使用

在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不是线性的存放对象的引用,Map接口提供了一种映射关系,所有的元素都是以键值对(Entry类型对象实例)的方式存储的,所以能够根据key快速查找value,key是映射关系的索引,value是key所指向的对象,注意,这里的value不是一个数值,而是一个对象的引用,Java集合框架的元素均是指对象!

phonegap与H5中的接口对比

接口 HTML5 phonegap 差异 地理定位 geolocation 单次定位: navigator.geolocation.getCurrentPosition(Success, [error],[options]); 重复性定位: navigator.geolocation.watchPosition(Success, [error],[options]); 调用接口同左 二者调用方法一致 在phonegap中定位时,会由于设备差异,导致某些设备上无法定位,需要借助百度地图SDK定位.

漫谈Java程序设计中的接口应用

Java语言提供了一种接口(interface)机制.这种接口机制使Java的面向对象编程变得更加灵活.我们可以用接口来定义一个类的表现形式,但接口不能包含任何实现.在<Thinking in Java>一书中,作者对接口有这样的描述:“接口(interface)比抽象(abstract)的概念更进了一步.你可以把一个接口看成是一个纯的抽象类.”我认为作者对接口的这一解释再准确不过了. 理解并用好接口机制将帮助我们更好的掌握Java这种面向对象的编程语言.下面我们来讨论一下接口的使用规则以及相

Java 8 中函数接口,陈货翻新了炒,只是为了Lambda表达式

Java开发人员应该对java.lang.Runnable,java.util.Comparator,java.util.concurrent.Callable 等等接口不会感到陌生.他们都只有一个单一的抽象方法.这样的接口,我们通常叫单一抽象方法接口(SAM,Single Abstract Method Interface). 以前大家应该经常使用下面的代码片段 public class InnerAnonymousClassSample { public static void main(S

Java中map接口 遍历map

java集合框架用于存储数据,也被称为集合类 位于java.util包下 java.util包下常用接口和类 Collection和Map是Java集合框架的根接口 List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问. Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因). Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value. Map接口 Map

为什么Java中有些接口没有任何方法

由于Java不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java语言引入了接口这一概念.接口是抽象方法定义的集合(接口中也可以定义一些常量值),是一种特殊的抽象类.接口中只包含方法的定义,没有方法的实现.接口中的所有方法都是抽象的.接口中成员的作用域修饰符都是public,接口中的常量值默认使用public static final修饰.由于一个类可以实现多个接口,因此通常可以采用实现多个接口的方式来间接的达到多重继承的目的. 在Java语言中,有些接口内部没有声明任何方法,也

Java中的接口

以下内容引用自http://wiki.jikexueyuan.com/project/java/interfaces.html: 接口是抽象方法的集合.如果一个类实现了一个接口,那么就需要继承这个接口中的所有抽象方法. 接口不是类.写一个接口和写一个类很相似,但是它们是两个不同的概念.类是描述一个对象的成员属性和行为.接口只包含一个类所实现的行为. 除非实现了接口的类是抽象的,否则接口中的所有方法都需要在类中实现. 在以下方面,接口和类非常相似: 一个接口可以包含任意数量的方法. 一个接口以.j