黑马程序员技术交流社区
标题:
接口可这样理解可以吗?接口就是为了实现多态的,求解?
[打印本页]
作者:
庞海瑞
时间:
2013-8-11 20:34
标题:
接口可这样理解可以吗?接口就是为了实现多态的,求解?
接口可这样理解可以吗?接口就是为了实现多态的,求解?
作者:
彭家贰小姐
时间:
2013-8-12 00:53
接口是实现多态的一种
多态:
一个父类Animal[动物],派生了Wolf[狼]和Sheep[羊]两个子类,由于每个子类都有其不同的代码实现,所以当用父类来引用这些子类时,同样的操作而可以表现出不同的操作结果,这就是所谓的多态。
class Animal
{
public virtual void Eat()
{
Console.WriteLine("动物都要吃东西");
}
}
class Wolf : Animal
{
public override void Eat()
{
Console.WriteLine("我是狼,我要吃羊!");
}
}
class Sheep : Animal
{
public override void Eat()
{
Console.WriteLine("我是羊,我要吃草!");
}
}
复制代码
然后在Main方法里面去调用它们
class Program
{
private static void Main(string[] args)
{
overrideDemo();
Console.ReadKey();
}
private static void overrideDemo()
{
//创建一个父类的数组
Animal[] animals = new Animal[] { new Wolf(), new Sheep() };
foreach (var item in animals)
{
item.Eat();
}
}
}
复制代码
2013-8-12 0-44-38.png
(8.12 KB, 下载次数: 51)
下载附件
2013-8-12 00:45 上传
父类的Eat方法根本就没有运
行,也就是数组虽然是Animal类型,但是他们分别是Wolf类和Sheep类的实例,而这两个类对Eat方法进行了override,因而执行的是他们重写的函数,而接口也是类似的,不同的是我们不需要override关键字
。
public interface IAnimal
{
void Eat();
}
public class Wolf : IAnimal
{
public void Eat()
{
Console.WriteLine("我是狼,我要吃羊!");
}
}
public class Sheep : IAnimal
{
public void Eat()
{
Console.WriteLine("我是羊,我要吃草!");
}
}
复制代码
运行结果和上面的类似,虽然类型相同,但是是谁的实例就调用谁的方法,彼此独立。
所以你也可以理解为接口可以实现多态的。
作者:
于驭龙
时间:
2013-8-12 10:24
接口相当于重写行为也就是方法的父类..跟基类又无关....可以看成自定义方法生成器.. 多个类同一个行为 可以用接口实现重写.
作者:
黑马-吕老师
时间:
2013-8-26 13:25
技术分10分可以在黑马报名系统进行入学资格审核,请尽快写够10篇学习日记到入学测试区发帖,并进行下一环节
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2