先从“继承”聊起......
- “继承”是对现实世界中“是一种(IS_A)”关系的模拟。
- 鸭子“是一种”鸟。(Duck——>Bird)(三角箭头符号代表继承)
现在试着为以下场景建立一个面向对象的编程模型
鸭子是一种鸟,会游泳,同时又是一种食物。
一种设计方案是:Duck——>Food,同时Duck——>Bird
- “会游泳”这个方法放在哪个类中?
- 放在Duck类中:并不是只有鸭子一种鸟会游泳。
- 放在Bird类中:并不是所有鸟都会游泳。
- C#/Java等编程语言不支持多继承
解决方案
将食物的特性单独抽取出来
- IFood接口抽象出“可食用”特性
public interface IFood
{
void Cook();
}
- ISwim接口抽象出“会游泳”特性
public interface ISwim
{
void Swim();
}
C#中接口的特点
- 使用interface关键字定义接口
- 接口的名字通常以“I”打头
- 接口中的方法只有声明,不包容任何代码
解决“鸭子”建模问题
- 鸟是一种抽象的概念,所以设计为抽象类,同时鸟会飞,不同鸟的飞翔方式不一样,所以fly方法是Bird类的抽象方法
- 食物应该实现IFood接口
- 水鸟应该实现ISwim接口
- 鸭子是一种鸟,会游泳,北京烤鸭很好吃