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

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. 如何存session,取session

    存session: Session["codes"] =要存的session字段 用哈希函数存多个: System.Collections.Hashtable hs = new S ...

  2. rsync 通过 ssh 上传文件

    rsync -avzP /www/ -e ssh root@192.168.1.200:/www/ 批处理上传: #!/bin/bash for (( ; ; )) do rsync -avzP /w ...

  3. C++ 随机数

    #include <iostream> #include <stdlib.h> #include <time.h> #define random(a,b) (ran ...

  4. Windows内核原理系列01 - 基本概念

    1.Windows API Windows 应用编程接口(API)是针对WIndwos操作系统用户模式的系统编程接口,包含在WindwosSDK中. 2.关于.NET .NET由一个被称为FCL的类库 ...

  5. EBS中后台AP发票审批脚本

    Declare    l_Hold_Count Number;    l_Funds_Code Varchar2(30);      l_Approve_Status Varchar2(120); B ...

  6. delphi IOS 获取电池信息

    procedure TDeviceInfoForm.btnGetDeviceInfoClick(Sender: TObject); var Device : UIDevice; begin Devic ...

  7. PHP大文件存储示例,各种文件分割和合并(二进制分割与合并)

    最近要对视频进行上传,由于涉及到的视频非常的大,因此采用的是分片上传的格式,下面是一个简单的例子: split.php <?php $i = 0; //分割的块编号 $fp = fopen(&q ...

  8. Python: 字典的基本操作

    字典是Python里唯一的映射类型.字典是可变的.无序的.大小可变的键值映射,有时候也称为散列表或关联数组. 例子在下面: dic = {"apple":2, "oran ...

  9. localstorage sessionstorage cookie 备忘

    /* sessionStorage: 保存的数据用于浏览器的一次会话,当会话结束(通常是该窗口关闭),数据被清空: localStorage: 保存的数据长期存在,下一次访问该网站的时候,网页可以直接 ...

  10. linux默认网关的设置

    linux装系统设IP,这应该是系统管理员的基本功,可是不同的网络结构有不同的ip设法,您知道吗? 1.一块网卡的情况   这个没啥好说的,估计地球人都知道:address,netmask,gatew ...