`
wsql
  • 浏览: 11712854 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

C#多态性-抽象类和抽象方法概述

 
阅读更多

如果继承是面向对象设计理论的基石,那么抽象理论和方法就是继承理论的顶梁柱。在汉语词典中抽象是这样解释的:将几个有区别的物体的共同特性或形象抽取出来或孤立地进行考虑的行动或过程。可以看出,抽象就是从事物中提取特征和性质,并不是事物本身。具体应该如何理解呢?

大家都知道,学生有一个共同的特征是必须学习,那么学什么,如何学,每一个学生就不一样了。这样可以提取学习这个动作为抽象方法,而不考虑具体内容。动物类都有叫的动作,具体动物如何叫,暂不考虑,先把共性提取出来。简单地说,用来描述这些共性的类就是抽象类,抽象类中不考虑具体实现,只确定必须具有的行为,就是抽象方法。

抽象方法是一个没有实现的方法,使用关键字abstract定义抽象方法。语法如下:

<访问修饰符> abstract 返回类型 方法();

例如:
public abstract void Cry();

当一个实例方法声明中含有abstract修饰符时,称之为抽象方法(abstract methods)。抽象方法只允许在抽象类中声明,但是并不能实现,抽象方法声明中只包含方法的签名,抽象方法在其派生类中使用override关键字来重写。在抽象方法声明中,不允许出现static、virtual或override中的任一修饰符。

注意:和普通方法不同,抽象方法没有闭合大括号,在方法括号后面直接加“;”号,表明抽象方法中没有方法体,即没有具体的实现。

抽象类是特殊的类,只是不能被实例化;除此之外,具有类的其它特性;抽象类可以包含抽象方法,其它类不能。抽象方法只能声明于抽象类中,且不包含任何实现,只包含方法的签名,派生类必须重写它们。另外,抽象类可以派生自一个抽象类,可以重写基类的抽象方法也可以不重写,如果不重写,则其派生类必须重写它们。

抽象类声明时类前加关键字abstract。抽象类不能被实例化,因为没有具体实现的方法。抽象类中可以包含非抽象的方法,也可以包含非抽象的方法。

注:子类继承抽象父类后,可以使用override关键字重写父类中的抽象方法,并做具体的实现。也可以不实现抽象方法,留给后代实现,这时子类仍旧是一个抽象类,必须声明为abstract。

抽象类的定义方法如下:

<访问修饰符> abstract class 类名
{
//抽象类体
}

using System;
public abstract class Parta
{
public abstract void Name();
public void A()
{
Console.WriteLine("姓名");
}
}

public class Partb: Parta
{
public override void Name()
{
Console.WriteLine("姓名李哲宇");
}
}

class Test
{
public static void Main()
{
Partb x = new Partb();
x.Name();
}
}

说明:抽象类中的方法除了抽象方法外,还可以包含非抽象方法,或者说是具体方法,但是包含抽象方法的类一定是抽象类。

抽象类的特点:
1、抽象类是子类的描述,就保鲜模板。只有被子类继承,才有实际意义。
2、抽象类不能实例化。
3、抽象类不能是密封的或者静态的,即抽象类前不能有static或sealed关键字。

分享到:
评论

相关推荐

    多态性和继承(所有关于抽象类在C#中)

    在这一系列“跳水在面向对象编程”的这篇...抽象类起到多态性和继承一个不同的和非常有趣的角色。我们将讨论抽象类与我们的动手实验和理论作为解释什么输出我们得到的所有方面。我们也将列出下来点,记得在文章的结尾。

    C#中多态性的实现

    多态是指一个行为具有多个不同表现形式的能力,在C#中通过多态性的检测时机可以分为静态多态性和动态多态性 静态多态性:函数重载和运算符重载 动态多态性:抽象方法、重写方法、隐藏方法 二:函数重载(overlode) ...

    深入浅析c#静态多态性与动态多态性

    C# 多态性 多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为”一个接口,多个功能”。 多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在...

    C#实验报告五.docx

    2.理解类的继承性与多态性,掌握其应用方法。 3.理解抽象类,接口的概念,掌握抽象类与接口的定义及使用方法。 4.理解分部类和命名空间的概念,掌握分部类和命名空间的使用方法。 二、实验要求 1.熟悉Visual Studio...

    C#程序编写的贪吃蛇

    1.通过C#课程设计,使学生能将学到的面向对象的程序设计思想用到具体的工作和学习中,加深对类与对象的理解,要求学生能够对现实生活中许多具体的事物抽象出类,并掌握继承与派生,基类、虚方法和抽象方法和多态性的...

    Visual C# 2010程序设计教程(教程PPT+源代码)

    基本信息 书名:高等学校计算机应用规划...8.3 多态性 …… 第9章 泛型 第10章 Windows窗体应用程序开发 第11章 C#数据库编程与ADO.NET 第12章 Web应用程序开发及ASP.NET 第13章 文件处理 第14章 语言集成查询-LINQ

    Modern C#系列课程(3):现代面向对象的程序设计 (Level 200)

    讲 师:俞晖 MSDN 特邀讲师 ...本次课程先简单介绍C#程序设计概念,然后将深入到更细致的.NET面向对象的程序设计中:包括了访问控制,对象封装性原理,C#中继承的应用,抽象类,重载,多态性和接口的知识。

    c#语言开发的一款RPG游戏.rar

    1.通过C#课程设计,使学生能将学到的面向对象的程序设计思想用到具体的工作和学习中,加深对类与对象的理解,要求学生能够对现实生活中许多具体的事物抽象出类,并掌握继承与派生,基类、虚方法和抽象方法和多态性的...

    C#本质论(第3版)

    7.2 通过接口来实现多态性 7.3 接口实现 7.3.1 显式成员实现 7.3.2 隐式成员实现 7.3.3 显式接口实现与隐式接口实现的比较 7.4 “实现类”与其接口之间的转型 7.5 接口继承 7.6 多接口继承 7.7 接口上的...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    7.2 通过接口实现多态性 215 7.3 接口实现 218 7.3.1 显式成员实现 220 7.3.2 隐式成员实现 221 7.3.3 显式接口实现与隐式接口实现的比较 221 7.4 在实现类和接口之间转换 222 7.5 接口继承...

    C#完整教程

    1.11 类的多态性 36 1.12 抽象类和抽象方法 38 1.13 密封类和密封方法 39 1.14 接口 39 1.15 代表 42 1.16 事件 43 1.17 索引指示器 44 1.18 名字空间 45 1.19 非安全代码 46 习题 47 第二章 Windows编程的基础知识 ...

    C#和Labview资料

    ……………………·9现继承 ¨¨…………………%.1 虚方法………………………·97.2 隐藏方法……………………·98.3 调用函数的基类版本 ………·994.2.4 抽象类和抽象函数 ……∷·△004,2,5 密封类和密封方法 ...

    Modern C#系列课程(3):现代面向对象的程序设计.part2

    Modern C#系列课程(3):现代面向...本次课程先简单介绍C#程序设计概念,然后将深入到更细致的.NET面向对象的程序设计中:包括了访问控制,对象封装性原理,C#中继承的应用,抽象类,重载,多态性和接口的知识。

    Modern C#系列课程(3):现代面向对象的程序设计.part1

    Modern C#系列课程(3):现代面向...本次课程先简单介绍C#程序设计概念,然后将深入到更细致的.NET面向对象的程序设计中:包括了访问控制,对象封装性原理,C#中继承的应用,抽象类,重载,多态性和接口的知识。

    C# 基础教程

    3.2.3 多态性 30 3.4 本章小结 33 3.5 实战演练 33 第四章 类 34 4.1 定义类 34 4.2 类的成员 34 4.3 访问限定符 35 4.4 构造函数 35 4.4.1 静态成员和实例成员 37 4.4.2构造函数的初始化函数 38 4.5 常量和只读字段...

    C#微软培训资料

    14.2 多 态 性 .159 14.3 抽象与密封 .163 14.4 继承中关于属性的一些问题.169 14.5 小 结 .172 第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 ...

    明日科技C#开发入门及项目实战

    实例114 重写抽象方法实现多态性 实例115 使用密封类密封登录用户信息 实例116 使用密封类封装个人身份证信息 实例117 使用迭代器显示公交车站点 实例118 通过迭代器实现文字的动态效果 实例119 使用分部类制作一个...

Global site tag (gtag.js) - Google Analytics