using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 接口 { //飞机实现飞的接口 public class Plan:IFly { public void Say() { Console.WriteLine("飞机在飞"); } } }
05.在Main方法实现调用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 接口
{
class Program
{
static void Main(string[] args)
{
//定义飞接口数组实例化对象
IFly[] iFlies =
{
new Grid(),
new Plan()
};
//循环数组调用方法实现多态
foreach (IFly iFly in iFlies)
{
iFly.Say();
}
//鸟吃实例化对象
IEat iEats = new Grid();
//调用方法实现多态
iEats.eat();
Console.ReadLine();
}
}
}
这样就可实现多态了,运行结果如下:
注:如果有一个类要实现两个接口,不巧的是这两个接口(如:IFly,IPlay)中右两个同命名的方法(Eat)
我们都知道
如果一个类实现了某个接口,就得实现该接口中所有的方法
这怎么办呐?自有解决的方法的:
我们就可以使用接口名.方法来实现
//实现了IFly和IPlay两个接口,但两个接口中都有Eat方法 public class Dog:IFly,IPlay { //如果一个类实现了某个接口,就得实现该接口中所有的方法 //这样我们就可以使用接口名.方法来实现 void IFly.Eat() { } void IPlay.Eat() { } }
4.接口总结(摘录):
接口是组件之间的协议,描述了组件对外提供的服务。从技术上讲接口是一组包含了函数型方法的数据结构。 通过这组数据结构,客户代码可以调用组件对象的功能。接口可以从父接口中继承。接口的继承首先是说明性继承,不是实现性继承,它的实现需要通过类或结构来实现;其次接口继承可以是多继承。
属性的本质是方法,索引器的本质是属性。
接口包含的成员有方法、属性、索引指示器和事件。由于接口允许多继承,在可能发生二义性的地方可以采用全权名来避免。可以用类来实现接口。在类中定位接口成员的实现称之为接口映射。类必须为接口的所有成员提供具体的实现,包括接口中显式定义的成员, 以及接口从父接口中继承而来的成员。同样,在对接口的实现过程中可以采用显式接口成员执行体来避免产生二义性。派生类可以对基类已经实现的接口进行重实现。
抽象类也可以实现接口,但接口成员必须映射到抽象类的抽象成员。抽象类的派生类如果是非抽象类,则必须通过方法重载来实现接口成员。