.net学习笔记--使用抽象方法实现多态
在使用抽象方法实现多态之前,我们必须知道一些知识点:
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学习笔记--使用抽象方法实现多态的更多相关文章
- Java 学习笔记(7)——接口与多态
上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...
- Java学习笔记(十)——多态
一.多态 1.对象的多种形态 (1)引用多态: 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 (2)方法多态: 创建本类对象时,调用的方法为本类方法: 创建子类对象时,调用的方法是子类方 ...
- 0022 Java学习笔记-面向对象-继承、多态、组合
继承的特点 单继承:每个子类最多只有一个直接父类,注意是直接父类,间接父类个数不限 注意父类的概念:A-->B-->C-->D,在这里,ABC都是D的父类,C是D的直接父类,AB是D ...
- Java编程思想学习笔记_2(继承和多态)
静态初始化: 静态初始化只在必要的时刻进行.(即当程序需要加载类进入内存的时候,执行静态初始化.静态变量和静态代码块的初始化顺序,按照在代码中声明的顺序老执行.例如:如果要执行某个public类,那么 ...
- Python3学习笔记19-继承和多态
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承, 新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Sup ...
- C#学习笔记_10_设计模式&继承&多态
10_设计模式&继承&多态 设计模式 由前人总结的用来解决特定问题的解决方案 单例模式 在一个项目的不同模块中获取对象,获取到的是同一个对象 代码 继承 概念:如果多个类中具有相同的字 ...
- C++学习笔记6——类的多态
简介: 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果.在运行时,可以通过指向基类的指针,来调用实现派生类中的方法. 虚函数: 在某基类中声明为virtual并在一个或多个派生类中被重 ...
- SQL反模式学习笔记7 多态关联
目标:引用多个父表 反模式:使用多用途外键.这种设计也叫做多态关联,或者杂乱关联. 多态关联和EAV有着相似的特征:元数据对象的名字是存储在字符串中的. 在多态关联中,父表的名字是存储在Issue_T ...
- java学习笔记7--抽象类与抽象方法
接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...
随机推荐
- flag--命令行参数解析之StringVar
func StringVar func StringVar(p *string, name string, value string, usage string) StringVar定义了一个有指定名 ...
- Nginx的安装配置 例子
1.下载 2.解压 3.运行 a.双击nginx.bat b.启动Nginx 会发现进程里面已经开始运行 4.配置 a.双击打开配置文件夹里面的nginx.conf b.修改 upstream tee ...
- <读书笔记>软件调试之道 :从大局看调试-发现代码存在问题
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...
- 在SQLSERVER中快速有条件删除海量数据技巧推荐
解释: 如果你的硬盘空间小,并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录),而且对速度要求比较高,并清除所有的数据建议你用turncate table1,因为truncate 是 ...
- DICOM图像像素值(灰度值)转换为CT值
CT值的单位是Hounsfield,简称为Hu,范围是-1024-3071.用于衡量人体组织对X射线的吸收率,设定水的吸收率为0Hu. 在DICOM图像读取的过程中,我们会发现图像的像素值有可能不是这 ...
- HTML5来回拖动实例
<html> <meta charset="utf-8"> <script> //规定被拖动的数据 function tdwhat(ev,obj ...
- paramiko与MySQL数据库
一.paramiko 1.利用paramiko连接远端服务器 import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_p ...
- svn的基线划分与管理
一.基线(服务端默认划分3条基线) trunk:表示开发时版本存放的目录,即在开发阶段的代码都提交到该目录上. branches:表示发布的版本存放的目录,即项目上线时发布的稳定版本存放在该目录中. ...
- Linux内核中断学习
1.内核中断概述 (1)在OS环境下编写中断处理函数与之前在裸机中编写中断处理函数的方式是不一样的,在Linux内核中提供了一套用来管理硬件中断资源的软件体系架构. (2)在操作系统中,中断号与gpi ...
- git ssh端口号变更之后所需要的修改
假设原本的repository地址为:git@gitlab.cjx.com:jinxin/project2.git 端口变更之后,需要调整为:ssh://git@gitlab.cjx.com:PORT ...