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

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. ruby 2.2

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" ...

  2. bash 相关的一些小代码片断

    批量修改文件名: for i in *.html; do mv $i ${i/oldstring/newstring}; done; 批量替换文件内容: sed -i "s/oldstrin ...

  3. index()、e.target.value、on()与快捷处理的区别、

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. Install Shield 打包教程

    我的是已经下载过打包工具InstallShield2013LimitedEdition,没有下载的只有下面那个灰色的的图标,不过没关系选中灰色的点确定直接跳到下载页面了.下载完成后再重新添加安装和部署 ...

  5. Math类中的BigDecimal

    如果我们编译运行下面这个程序会看到什么? public class Test {    public static void main(String args[]) {                 ...

  6. linux yum下载RPM包后再安装LAMP环境

    1.下载yum插件 yum-downloadonly,实现只下载软件包的功能. yum install yum-downloadonly 或者 yum install yum install yum- ...

  7. VC++ 截屏代码,并保存为想要的格式(BMP,JPG,PNG,GIF等格式)

    void CCaptionScreenDlg::Screen(char* filename) { HDC hdcSrc = ::GetDC(NULL); int nBitPerPixel = GetD ...

  8. lisp中的cons

    看到ANSI Common Lisp 第三章的游程编码时,就发现作者很准确的使用了list和cons来生成目标列表,虽然list是由cons扩展而来,区别也仅仅是最后一个元素的加入方式,于是勾起了之前 ...

  9. 将golang程序注册为windows服务

    1.go get  bitbucket.org/kardianos/service 2.参考里面的exmaple,就可以了 我承认我有点蛋疼

  10. sql group by datetime on day

    SELECT        DATEADD(dd, DATEDIFF(dd, 0, postDate), 0)FROM          tableWHERE        (postDate > ...