内容正文:
8.3 接口
算法与程序设计--C#
同步精品课堂
河北科学技术出版社
教学目标
一
理解接口的多继承性、契约性和灵活性
掌握接口与抽象类的区别和联系
03
04
掌握接口的声明与实现
理解接口的概念
01
02
教学目标
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
教学重难点
二
教学难点
1、接口的声明与实现
2、接口的特征
3、接口与抽象类的区别
教学重点
理解接口的多继承性及其应用场景
教学难点
导入新课
三
讨论:
在日常生活中,我们经常会接触到各种接口。例如,USB 接口是一种标准化的接口,不同的设备(如 U 盘、鼠标、键盘等)只要符合 USB 接口的规范,就可以连接到电脑上使用。在编程中,接口也起到了类似的作用,它定义了一组规范,不同的类只要实现了这个接口,就可以被统一处理。
新知讲授
四
接口的概念
接口(interface)是C#的一种数据类型,属于引用类型。一个接口定义一个协议。接口可以包含方法、属性、事件和索引器或这4种成员类型的任何组合构成,但不能包含字段,它只描述这些成员的签名(即成员的数据类型、名称和参数等),不提供任何实现代码,具体实现由继承该接口的类来实现。
➽简单概括:
· 接口是一种特殊的抽象类,它只包含方法、属性、事件或索引器的声明,但不包含实现。
· 接口用于定义一组行为规范,实现接口的类必须提供这些行为的具体实现。
· 接口是实现多态的一种方式。
新知讲授
四
接口的声明
在C#中,声明接口使用interface关键字,一般形式如下:
[访问修饰符] interface 接口名
{
//接口成员
}
其中,访问修饰符只能使用public和internal,默认为public,可以省略;接口名的命名规则与类名的命名规则相同,为了与类相区别,建议使用大写字母I打头。接口可以继承,基接口列表表示其继承的接口名。接口成员可以是属性、方法等,不能包含常量、
新知讲授
四
接口的声明
字段、构造函数和析构函数。所有接口成员隐式地具有了public访问修饰符,因此,不能为接口成员添加任何访问修饰符。
➽示例1:
public interface IDrivable
{
void Drive();
}
新知讲授
四
· 示例2:
public interface IAnimal
{
void Eat();
void Sleep();
}
分析:
(1)IAnimal 是接口名,通常以 I 开头命名,以区分于类名。
(2)Eat() 和 Sleep() 是接口中声明的方法,只有方法签名,没有方法体。
新知讲授
四
接口的实现
在C#中接口的实现,使用interface关键字,其语法格式如下:
[修饰符] interface 接口名称:继承的接口列表
{
接口内容;
}
声明接口时,除interface关键字和接口名称外,其他都是可选项。可使用new、public、protected、 internal、 private 等修饰符声明接口,但接口成员必须是公共的。
新知讲授
四
接口的特征
1、成员只有声明,没有实现:接口中的方法、属性等成员只有签名,没有具体的实现代码,实现接口的类负责提供具体实现。
2、不能实例化:接口不能直接创建对象,只能通过实现该接口的类来使用。
3、支持多继承:一个类可以实现多个接口,从而具备多个接口所定义的功能。
4、隐式实现和显式实现:类可以隐式或显式地实现接口成员。隐式实现时,成员可以通过类的实例直接访问;显式实现时,成员只能通过接口引用访问。
新知讲授
四
· 示例1:
class Dog : IAnimal
{
public string Name { get; set; }
public void Speak()
{
Console.WriteLine(Name +" is barking.");
}
}
新知讲授
四
· 示例2:
public interface IAnimal
{
void Eat();
void Sleep();
}
public class Dog : IAnimal
{
public void Eat()
{
Console.WriteLine("狗在吃东西");
}
public void Sleep()
{
Console.WriteLine("狗在睡觉");
}
}
Dog 类实现了 IAnimal 接口,必须实现 Eat() 和 Sleep() 方法。
新知讲授
四
显示接口成员实现
如果类实现两个接口,并且这两个接口包含具有相同签名的成员,那么在类中实现该成员将导致两个接口都使用该成员作为它们的实现,然而,如果两个接口成员实现不同的功能,则可能会导致其中一个接口的实现不正确或两个接口的实现都不正确,这时可以显式地实现接口成员,即创建一个仅通过该接口调用并且特定于该接口的类成员。显式接口成员实现是使用接口名称和一个句点 “. ”命名该类成员来实现的。
新知讲授
四
抽象类的概念
抽象类是一种不能实例化的类,它可以包含抽象方法和抽象属性,也可以包含普通方法和属性。例如,定义一个 “Animal” 抽象类,它包含一些通用的属性(如 “Name”)和方法(如 “MakeSound”,但不同动物的叫声不同,所以该方法设为抽象),具体的 “Dog” 类和 “Cat” 类继承自 “Animal” 类,并重写 “MakeSound” 方法来实现各自独特的叫声。
➽作用:
1、为派生类提供公共的基类,定义派生类共有的属性和方法。
2、定义抽象方法和抽象属性,强制派生类实现这些方法和属性。
新知讲授
四
抽象类的声明
在C#中声明抽象类时需要使用abstract关键字,其语法格式如下:
[修饰符] abstract class 类名: 基类或接口
{
类成员;
}
抽象类和接口都包含可以由派生类继承的成员,它们都不能直接实例化,但可以声明它们的变量。
新知讲授
四
抽象类和接口的区别
特性 接口 抽象类
实例化 不能实例化 不能实例化
实现 只能包含签名 可以包含实现
继承 可以实现多个接口 只能继承一个抽象类
成员 只能包含方法、属性、事件、索引器的签名 可以包含字段、方法、属性、事件、索引器
访问修饰符 默认 public 可以使用任意访问修饰符
师生互动
五
1、总结接口的特点;
2、总结抽象类与接口的区别;
讨论
随堂练习
六
1、在C#中,使用 ______ 关键字声明接口。
答案:interface
解析:interface用来声明接口。
2、一个类可以实现多个接口,但只能继承一个________。
答案:抽象类
解析:一个类只能继承一个抽象类。
随堂练习
六
3、关于接口的描述,以下选项中正确的是( )
A. 接口可以包含字段
B. 接口可以包含方法的实现
C. 接口可以包含属性、方法和事件的声明
D. 接口可以被实例化
答案:C
解析:接口只能包含属性、方法和事件的声明,不能包含字段或方法的实现,也不能被实例化。
随堂练习
六
4、 关于C#中的抽象类,以下说法错误的是( )
A. 抽象类不能被实例化
B. 抽象类可以包含抽象方法和非抽象方法
C. 抽象类可以包含字段和构造函数
D. 抽象类必须包含抽象方法
答案:D
解析:抽象类可以不包含抽象方法,但不能被实例化。抽象类可以包含字段、构造函数、非抽象方法和抽象方法
随堂练习
六
5、抽象类和接口的区别不包括( )
A. 抽象类可以包含字段,接口不能
B. 抽象类可以有构造函数,接口不能
C. 一个类只能继承一个抽象类,但可以实现多个接口
D. 抽象类中的方法必须是抽象方法,接口中的方法必须是具体实现
答案:D
解析:抽象类中可以有抽象方法,也可以有非抽象方法;接口中的方法都是抽象的,不能有具体实现
随堂练习
六
6.接口可以被实例化。( )
7.一个类可以继承多个基类。( )
答案:6. 错 7. 错
解析:
6.接口不能被实例化,它只是一个抽象的契约。
7.在 C# 中,一个类只能直接继承一个基类,但可以实现多个接口。
课堂小结
七
谢谢
$$