文档详情

c课件抽象方法和抽象类.ppt

发布:2016-08-27约4.29千字共15页下载文档
文本预览下载声明
抽象方法和抽象类 多态性 在程序中同一符号或名字在不同情况下具有不同解释的现象称为多态性。表现在两方面: 方法的重载。 对象的上转型对象。子类可以改写父类的方法,而上转型对象(父类的对象)可以调用改写后的方法。不同的子类可能改写的内容不同。比如:动物类中的cry()方法,在子类“猫”中可以改写为“喵喵”,而在子类“狗”中可以改定为“汪汪”。猫类的和狗类的上转型对象在调用cry()方法时是各不相同的。 一个类可能会有很多的子类,这些子类中都有共同的行为,但行为的实现方法有所差异,为了迫使在编写子类时均实现这些方法,且保持统一的名称,可以事先在这些子类共同的父类中将方法的类型、名称、形参等确定下来,而方法体在子类中确定,对这种父类并不具体实现这些方法,而只定义了方法类型、名称、形参等的方法称为抽象方法,在定义时需在方法名称前加abstract,具有一个以上抽象方法的类称为抽象类,类名称前也要加修饰词abstract, 抽象方法和抽象类 抽象类是指不能被实例化的类,是派生类的基础,通过部分实面或不实现.抽象类可作为其它类的模板. 声明抽象类的语法如下: abstract??? class??? 类名 { ??? ..... } 1.抽象方法是隐式的虚方法. 2.只允许在抽象类中声明抽象方法 3.抽象方法声明不提供实际的实现,没有方法体,方法声明以一个分号结束,并在声明后没有大括号. 例如: ?public abstract void Area( ); 举例 举一个简单的例子,“图形”这个类是抽象的,它的成员方法“计算图形面积”也就没有实际的意义。面积只对“图形”的派生类比如“圆”、“正方形”这些非抽象的概念才有效,那么我们就可以把基类“图形”的成员方法“计算面积”声明为抽象的,具体的实现交给派生类通过重载来实现。 分析: 抽象类:图形,抽象方法—求面积 (指出:图形必须有求面积的方法,但因为不同图形求面积的方法不一样,因此将此方法声明为抽象方法) 子类:正方形类,实现了抽象类中求面积的抽象方法。 子类:圆,实现了抽象类中求面积的抽象方法。 ? abstract public class Dimensions?//声明类Dimensions为抽象类 { ??protected double x; ? public const double PI = Math.PI; public Dimensions(double x) {this.x=x;} ? public abstract double Area();// 在抽象类Dimensions中声明抽象方法Area() } public class Circle : Dimensions ? { ??????? public override double Area()//派生类Circle中必须使用override修饰符实现基类中的抽象方法Area( ) ??????? { ??????????? Console.WriteLine(该方法计算圆的面积); ??????????? return PI * x * x; ??????? } ??? } public class Squre : Dimensions ? { ??????? public override double Area()//派生类Squre中必须使用override修饰符实现基类中的抽象方法Area( ) ??????? { ??????????? Console.WriteLine(“该方法计算正方形的面积); ??????????? return (x*x); ??????? } ??? } 特征 抽象方法:只包含方法定义,但没有具体实现的方法,需要其子类或者子类的子类来具体实现。? 静态方法不能标记为 override、virtual 或 abstract,即静态方法都必须是具体的? 抽象类:含有一个或多个抽象方法的类称为抽象类,在声明时,类名前须添加“abstract”关键字?,但抽象类中可以包含非抽象方法? 抽象类不能够被实例化,这是因为它包含了没有具体实现的方法,即可实例化的类一定不是抽象类,不包含未具体实现的抽象方法。? 抽象方法不能是私有的,它必须为公共的。 子类继承抽象父类后,可以使用override关键字覆盖父类中的抽象方法,并做具体的实现。也可以不实现抽象方法,留给后代实现,这时子类仍旧是一个抽象类,必须声明为abstract? 抽象类的好处 当更新组件版本时,可根据需要将附加方法添加到基类,但抽象方法和属性必须保持不变。 它可以很好的组织类的结构,举个例子。我们将人建模为一个抽象类,将人类共有的特性在抽象类中实现。而不同群体
显示全部
相似文档