1、Interface只是一个特殊的abstarct class,感觉就两点:一是所有方法均为abstarct method,二是只能定义static和final的修饰的成员变量。
但它本质还是可以看作一个类啊?那何必引入interface的概念呢?2、在《C# Primer Plus》中说,多继承的主要问题是"当两个基类具有相同信号的成员函数和成员变量时怎么办"的问题。但现在C#用interface,一样存在这个问题啊?3、“abstarct method不提供实现,实现由overriding方法提供,它是非抽象类的成员”。但为什么在“继承这些接口”的类中,在覆盖接口抽象函数时,不使用override关键字呢?
但它本质还是可以看作一个类啊?那何必引入interface的概念呢?2、在《C# Primer Plus》中说,多继承的主要问题是"当两个基类具有相同信号的成员函数和成员变量时怎么办"的问题。但现在C#用interface,一样存在这个问题啊?3、“abstarct method不提供实现,实现由overriding方法提供,它是非抽象类的成员”。但为什么在“继承这些接口”的类中,在覆盖接口抽象函数时,不使用override关键字呢?
现在有接口F,类A和B都继承了f,那么现在A和B之间就有了共同的部份,那就是接口F,接口在使用时是可以实例化的,例如:F f1=new A(); F f2=new B();
接口的用处好大,你看一下.net的基本类库中也有很多的接口
举一个例子吧,你的程序会用到很多的扩展,你可能随时会添加一个插件进去,那你的程序怎样去控制你的插件.最好的就是使用接口了,你定义一个接口,在其中加入一些控制的方法,所有的插件都必须继承这个接口,那么你的程序就可以很方便的控制每一个插件了
但它本质还是可以看作一个类啊?那何必引入interface的概念呢?
===========================================================================
首先要指出你的错误,interface 不能定义成员变量 ,不管是static or final ,只可以是属性和方法
从语言上讲,你的第一个问题和第二个问题可以合二为一 , 如果没有interface,多重继承的二义性的问题基本无法解决,例如:
class a{
public void test();
}
class b{
public void test();
}
public c:a,b{
} b b1 = new c();
c1 c1 = (c)b;
c1.test()//调用哪一个
如果是interface,子类必须覆盖基的所有方法,这个问题基本比较圆满的解决,
3、“abstarct method不提供实现,实现由overriding方法提供,它是非抽象类的成员”。但为什么在“继承这些接口”的类中,在覆盖接口抽象函数时,不使用override关键字呢?
==================================================================================
c# 提供override 关键字,与之对应的是new ,interface 的方法必须要实现。所以不用override , new 是改写
对此我有不同看法,我感觉就扩展而言,接口不如继承,因为在接口中添加方法,你必须在所有继承该接口的类里面实现,而用继承,你就只需实现一次.
不知道大家意见如何。
============================================该用class 的地方,你用interface, 该用interface的地方,你用class, 当然会觉得不合适,
语言只是工具,关键看你怎么使用
C#是较近期的语言,它吸引各种语言的优点和缺点,它能有这些概念自然有它的好处!!