A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

接口可这样理解可以吗?接口就是为了实现多态的,求解?

3 个回复

正序浏览
技术分10分可以在黑马报名系统进行入学资格审核,请尽快写够10篇学习日记到入学测试区发帖,并进行下一环节
回复 使用道具 举报
接口相当于重写行为也就是方法的父类..跟基类又无关....可以看成自定义方法生成器.. 多个类同一个行为 可以用接口实现重写.
回复 使用道具 举报
接口是实现多态的一种
多态:一个父类Animal[动物],派生了Wolf[狼]和Sheep[羊]两个子类,由于每个子类都有其不同的代码实现,所以当用父类来引用这些子类时,同样的操作而可以表现出不同的操作结果,这就是所谓的多态。
  1. class Animal
  2. {
  3. public virtual void Eat()
  4. {
  5. Console.WriteLine("动物都要吃东西");
  6. }
  7. }

  8. class Wolf : Animal
  9. {
  10. public override void Eat()
  11. {
  12. Console.WriteLine("我是狼,我要吃羊!");
  13. }
  14. }

  15. class Sheep : Animal
  16. {
  17. public override void Eat()
  18. {
  19. Console.WriteLine("我是羊,我要吃草!");
  20. }
  21. }
复制代码
然后在Main方法里面去调用它们
  1. class Program
  2. {
  3. private static void Main(string[] args)
  4. {
  5. overrideDemo();
  6. Console.ReadKey();
  7. }

  8. private static void overrideDemo()
  9. {
  10. //创建一个父类的数组
  11. Animal[] animals = new Animal[] { new Wolf(), new Sheep() };
  12. foreach (var item in animals)
  13. {
  14. item.Eat();
  15. }
  16. }
  17. }
复制代码

父类的Eat方法根本就没有运行,也就是数组虽然是Animal类型,但是他们分别是Wolf类和Sheep类的实例,而这两个类对Eat方法进行了override,因而执行的是他们重写的函数,而接口也是类似的,不同的是我们不需要override关键字
  1. public interface IAnimal
  2. {
  3. void Eat();
  4. }

  5. public class Wolf : IAnimal
  6. {
  7. public void Eat()
  8. {
  9. Console.WriteLine("我是狼,我要吃羊!");
  10. }
  11. }

  12. public class Sheep : IAnimal
  13. {
  14. public void Eat()
  15. {
  16. Console.WriteLine("我是羊,我要吃草!");
  17. }
  18. }
复制代码
运行结果和上面的类似,虽然类型相同,但是是谁的实例就调用谁的方法,彼此独立。
所以你也可以理解为接口可以实现多态的。








回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马