在使用抽象方法实现多态之前,我们必须知道一些知识点:

1.抽象类不能被实例化;

2.抽象类可以包含非抽象成员,它们可以由其子类继承调用。

我们可以先创建一个Person的抽象类,代码如下:

 abstract class Person
{ public Person() { } public Person(string name,int age)
{
Name = name;
Age = age;
}
string name;
public string Name
{
get { return name; }
set { name = value; }
}
int age; public int Age
{
get { return age; }
set { age = value; }
} public abstract void Show();
}

Person类中我们定义了个抽象方法Show(),注意抽象方法只能在抽象类中,而且其没有方法体。

接下来写两个继承Person类的两个子类,代码如下:

 class Student:Person
{
public override void Show()
{
Console.WriteLine("我是student类的Show方法:{0},{1}",Name,Age);
}
}
class Teacher : Person
{ public override void Show()
{
Console.WriteLine("我是teacher类的Show方法:{0},{1}", Name,Age);
}
}

当子类继承抽象类时:1.重写方法必须添加关键字override关键字,否则不认为是重写方法

2.override方法的方法签名必须和父类的方法完全一样

3.override方法必须找到可以被重写的父类方法

4.抽象方法子类必须重写

抽象类跟子类都写完了 ,接着就是实现多态了,多态的使用方式一般有三种:

1.声明父类变量,实例化子类对象
                            2.父类做为参数,传入子类对象
                            3.父类做为方法的返回值,返回具体的子类对象

实现多态代码如下:

  static void Main(string[] args)
{
Student stu = new Student() {Name="aa",Age= };
Teacher tea = new Teacher() {Name="bb",Age=};
// 这里并没有创建Person对象。只是使用它做为类型创建一个数组对象
Person[] objs=new Person[];
objs[] = stu;
objs[] = tea; foreach (Person item in objs)
{
item.Show();//多态是指不同的子类对象的响应,多态是行为的多态
}
Console.ReadKey();
}

最后还有一点,抽象类也可以继承抽象类,但是我们知道,继承抽象类的子类必须重写抽象类的抽象方法,当抽象类继承抽象类时,继承的抽象方法必须加上个override。代码如下:

 abstract class Manager:Person
{
//子类如果不想重写父类的方法,也必须添加override关键字,但是同时可以声明为抽象的方法,不去做真正的重写
public abstract override void Show();
}

.net学习笔记--使用抽象方法实现多态的更多相关文章

  1. Java 学习笔记(7)——接口与多态

    上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...

  2. Java学习笔记(十)——多态

    一.多态 1.对象的多种形态 (1)引用多态: 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 (2)方法多态: 创建本类对象时,调用的方法为本类方法: 创建子类对象时,调用的方法是子类方 ...

  3. 0022 Java学习笔记-面向对象-继承、多态、组合

    继承的特点 单继承:每个子类最多只有一个直接父类,注意是直接父类,间接父类个数不限 注意父类的概念:A-->B-->C-->D,在这里,ABC都是D的父类,C是D的直接父类,AB是D ...

  4. Java编程思想学习笔记_2(继承和多态)

    静态初始化: 静态初始化只在必要的时刻进行.(即当程序需要加载类进入内存的时候,执行静态初始化.静态变量和静态代码块的初始化顺序,按照在代码中声明的顺序老执行.例如:如果要执行某个public类,那么 ...

  5. Python3学习笔记19-继承和多态

    在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承, 新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Sup ...

  6. C#学习笔记_10_设计模式&继承&多态

    10_设计模式&继承&多态 设计模式 由前人总结的用来解决特定问题的解决方案 单例模式 在一个项目的不同模块中获取对象,获取到的是同一个对象 代码 继承 概念:如果多个类中具有相同的字 ...

  7. C++学习笔记6——类的多态

    简介: 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果.在运行时,可以通过指向基类的指针,来调用实现派生类中的方法. 虚函数: 在某基类中声明为virtual并在一个或多个派生类中被重 ...

  8. SQL反模式学习笔记7 多态关联

    目标:引用多个父表 反模式:使用多用途外键.这种设计也叫做多态关联,或者杂乱关联. 多态关联和EAV有着相似的特征:元数据对象的名字是存储在字符串中的. 在多态关联中,父表的名字是存储在Issue_T ...

  9. java学习笔记7--抽象类与抽象方法

    接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...

随机推荐

  1. 英语学习app分析

    以下数据分析由队员张波收集整理队员链接 队友的博客 一.数据统计 为了让统计数据更加准确可信,我们选取了三款android平台的应用市场软件作为数据的来源. 英语学习app下载量统计表: 序号 应用名 ...

  2. 轻松获取LAMP或LNMP环境编译参数

    查看web服务的编译参数 1. 查看nginx的编译参数: /apps/nginx/sbin/nginx -V 范例: [root@VM- ~]# /apps/nginx/sbin/nginx -V ...

  3. JS面向对象的程序设计

    面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装.继承.多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义J ...

  4. C++小常识笔记

    1.C++的继承保护级别最好是显示的写出来.(注:class 的默认继承为private,struct的默认继承为public). 例: class Base{/**/}; struct D1 : B ...

  5. sql评估期已过如何解决该问题

    点击开始-所有程序-Microsoft SQL Server 2008-配置工具-SQL Server 安装中心然后点击左侧的维护,在点击右侧的版本升级,接着按照提示一直点下一步,到产品密钥的时候输入 ...

  6. spring IOC核心原理

    下面来了解一下Spring到底是怎么运行的. public static void main(String[] args) { ApplicationContext context = new Fil ...

  7. PS 使用首记 修改png图片的颜色

    ps打开png图片文件 改颜色 1.魔棒工具,选择图片中的圆圈或方框,双击,选中,出现蚂蚁线. 2.右侧调好颜色 3.alt+delete颜色就改成功了.保存ok. 吸管工具,吸到颜色,存到色板.需要 ...

  8. VUE 入门基础(4)

    四,计算属性 基础例子 <div id='example'> <p>0riginal message: "{{message}}"</p> &l ...

  9. Google Protocol Buffer 的使用

    简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 ...

  10. 微信官方demo(php)

    <?php /** * wechat php test */ //define your token define("TOKEN", "weixin"); ...