c10接口与抽象类

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

13
C#语言程序设计
河北理工大学 赵爽
由于Duck类继承自抽象基类Bird,又实现了 ISwim和IFood两个接口,所以,Duck对象拥有这 三者所定义的所有方法,并且可以赋值给这三种 类型的变量。
需要注意的是,虽然程序中始终都只有一个 Duck对象,但将其赋值给不同类型的变量后,其 可以使用的方法是不一样的。
C#语言程序设计
第 十 章 抽象类与接口
河北理工大学 赵 爽
1
C#语言程序设计
抽象类与抽象方法
河北理工大学 赵爽
苹果是一种水果。
在计算机中,将上述关系用“继承”模拟
根据常识,我们知道世界上存在着真实的苹 果实体,却并不存在着一种水果实体。对应 地,在程序中只能创建Apple对象,不能创 建Fruit对象。
5
C#语言程序设计
河北理工大学 赵爽
class Apple : Fruit //苹果 {
public override void GrowInArea()
{ Console.WriteLine("南方北方都可以种植我。");
}
} class Pineapple : Fruit //菠萝 {
public override void GrowInArea()
不能创建对象的类称为“抽象类(abstract class)”。
2
C#语言程序设计
河北理工大学 赵爽
在一个类前面加上“abstract”关键字,此类就成 为了抽象类。
abstract class Fruit //抽象类 { } 抽象类一般用于表达一种比较抽象的事物,比如“水 果”,“交通工具”等。
{ Console.WriteLine("我喜欢温暖,只能在南方看到我。");
}
} 注意上述代码中的override关键字,这说明子类重写了 基类的抽象方法。
6
C#语言程序设计
河北理工大学 赵爽
抽象类不能创建对象,一般用它来引用子类对象。
Fruit f; f = new Apple(); f.GrowInArea(); f = new Pineapple(); f.GrowInArea();
14
C#语言程序设计
河北理工大学 赵爽
实现接口的类需要实现所有接口方法。
interface IMyInterface {
void func1(); void func2(); } class A:IMyInterface { public void func1() { } }
Duck d = new Duck(); d.Fly(); d.Cook(); d.Swim();
Bird b = d; //现在只能使用基类定义 的Fly()方法 b.Fly();
ISwim s = d;
//现在只能使用接口定义的 Swim()方法
s.Swim();
IFood f = d; //现在只能使用接口定义的 Cook()方法 f.Cook(); }
abstract class Fruit //抽象类
{
public abstract void GrowInArea(); //抽象方法
}
4
C#语言程序设计
河北理工大学 赵爽
由于抽象方法没有执行代码,必须在非抽象 的派生类中重写,显然抽象方法也是虚拟的,但 是不能加关键字virtual。
如以下两个类分别代表苹果(Apple)和菠 萝(Pineapple)。
3
C#语言程序设计
ቤተ መጻሕፍቲ ባይዱ
河北理工大学 赵爽
注意抽象方法不能有实现代码,在方法名后直 接跟一个分号。
在抽象类中可以定义抽象方法,一个方法前面加上 “abstract”关键字,此方法就成为了抽象方法。抽象方法 说明此抽象类应该具有的某种功能。
比如水果一定有一个最适合其生长的地区,但不同的 水果这一生长地是不同的,可以在 Fruit类中定义一个抽象 方法GrowInArea()。
Console.WriteLine("只有野鸭才会飞"); } }
注意:若一个类同时实现多个接口和派生自一个基 类,定义时,基类要放在第一位。
12
C#语言程序设计
可按以下格式使用接口:
河北理工大学 赵爽
接口类型名 变量名=new 实现了接口的类型名();
static void Main(string[] args) {
8
C#语言程序设计
接口
河北理工大学 赵爽
鸭子是一种鸟,会游泳,同时可以作为一种食物烹 调。
马铃薯是一种植物,可以作为一种食物烹调。 游泳运动员是人,会游泳。
如果在面向对象的程序中描述鸭子,怎么定义?
由于在C# 中,所有的类都只能有一个父类。为了 解决这一问题,C#引入了接口(Interface)这一概 念,并规定“一个类可以实现多个接口”。
7
C#语言程序设计
小结:
河北理工大学 赵爽
抽象类专用于派生出子类,子类必须重写抽象类所声明 的抽象方法,否则,子类仍是抽象类。
在C#中,抽象方法只能出现在抽象类内(即在普通类 中不能定义一个抽象方法),而一个抽象类可以没有一个 抽象方法(即它的所有方法都不是抽象的)。
一个抽象类中可以包含非抽象的方法。因此:包含抽 象方法的类一定是抽象类,但抽象类中的方法不一定是抽 象方法。
9
C#语言程序设计
接口的定义与使用
河北理工大学 赵爽
关键字interface用于定义接口
interface ISwim {
void Swim();
接口的所有方法都是抽象 方法。但不能有构造函数 或字段。
} interface IFood {
void Cook();
注意:接口的成员默认就是 public的,不要画蛇添足地 在方法前加上“public”关键 字。
}
10
C#语言程序设计
河北理工大学 赵爽
可以用与继承相同的语法定义一个类实现某些接口。
//定义一个抽象类 abstract class Bird {
public abstract void Fly(); }
11
C#语言程序设计
河北理工大学 赵爽
class Duck : Bird, IFood, ISwim {
public void Swim() //实现ISwim接口 {
Console.WriteLine("是鸭子就会游泳"); }
public void Cook() //实现IFood接口 {
Console.WriteLine("鸭子经常被烧烤,北京烤鸭就很有名"); } public override void Fly() //重写抽象类Bird中的抽象方法 {
相关文档
最新文档