UAC2015W0409SourceUAC2015W0409章节.pptxVIP

  • 7
  • 0
  • 约2.67千字
  • 约 22页
  • 2017-11-27 发布于广东
  • 举报
第09课 抽象类与密封类课程名称 Lesson Title抽象类与密封类学习者等级 Learner Level 基础阶段模块 Module 编程进阶实战本课时长 Duration 45分钟学习者背景 Learner Background本课程要求学习者掌握封装、继承、多态的用法。教学目标 Objectives? 让学习者能够掌握抽象类与非抽象类的区别? 能够掌握抽象类以及抽象方法的用法? 能够理解密封类及密封方法的用法主题 Topics 抽象类 抽象方法 抽象类的构造函数 密封类 密封方法抽象类抽象类概念现实生活中有很多抽象概念,它本身不与具体的对象相联系,但可以为其派生类提供一个公共的界面,这类概念在C#中可定义为抽象类。例如,“图形”就可以作为一个抽象类,每一个图形对象实际上都是其派生类的实例。抽象类抽象类的声明在C#中通过abstract关键字来对抽象类进行修饰。关键字public abstract class Shape//定义抽象类{ }抽象类抽象类的实例化抽象类不能使用new关键字来直接创建对象,但可以将其与派生类的实例相关联。Shape s = new Shape();//错误:不允许创建抽象类的实例Shape c = new Circle();//正确主题 Topics 抽象类 抽象方法 抽象类的构造函数 密封类 密封方法抽象方法抽象类的问题抽象类中常常会出现这种情况:其所有派生类都应该提供某个方法,但无法为这些方法定义一个统一的实现形式。抽象方法解决方法C#提供的解决方法是:同样使用abstract关键字将此方法定义为抽象方法。抽象方法没有实现代码,但该抽象类的派生类都必须重写方法。public abstract class Shape{ public abstract double GetArea();//定义抽象方法}public class Circle : Shape{ public override double GetArea()//重写方法 { return 0; }}关键字抽象方法抽象方法的好处如果抽象类的派生类是非抽象的,那么它必须重载基类中的所有抽象方法,并为这些方法提供具体的实现;如果抽象类的派生类也是抽象的,那么它必须重载基类中的所有抽象方法,且重载方法要么提供具体实现要么也是抽象的(同时使用override和abstract)。抽象方法例子: public abstract class Vehicle { public abstract void Speak();//抽象方法:无执行代码 } public abstract class Automobile:Vehicle { public override abstract void Speak();//抽象+重载 } public class Truck : Automobile { public override void Speak()//重载 { Console.WriteLine(叭叭……); } }主题 Topics 抽象类 抽象方法 抽象类的构造函数 密封类 密封方法抽象类的构造函数抽象类不能创建实例,可以定义构造函数(不能使用abstract修饰符),其作用是供派生类的构造函数重载使用。 public abstract class Vehicle { public float Speed { get; set; } public Vehicle(float speed) //构造函数 { this.Speed = speed; } }抽象类的构造函数提示:抽象类和静态类都不能创建实例,但一个类不能既是抽象的又是静态的,同样,抽象方法、虚拟方法和重写方法也不能是静态的。主题 Topics 抽象类 抽象方法 抽象类的构造函数 密封类 密封方法密封类密封类的定义一些类型不允许或是不需要再有派生类型,在C#中可使用sealed修饰符将其定义为密封类。关键字public sealed class Circle//定义一个密封类{ private double r; public Circle(double r) { this.r = r; }}密封类程序如果再试图定义Circle的派生类就会发生错误。public class Ellipse : Circle{ }主题 Topics 抽象类 抽象方法 抽象类的构造函数 密封类 密封方法密封方法密封方法的定义Sealed修饰符还可以用于类的成员方法,其含义是该方法在派生类中不能被重写。也就是说密封类继承的“截止”,而密封方法是对类继承中方法重写的截止。关键字public sealed override double GetArea(){ re

文档评论(0)

1亿VIP精品文档

相关文档