.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 ...
随机推荐
- 关于ORACLE中配置文件的问题
关于windows服务和oracle的问题的解决 <?xml version="1.0" encoding="utf-8"?><configu ...
- Linux 显示文件完整路径
原链接 http://blog.chinaunix.net/uid-25266990-id-3268759.html ls foo | sed "s:^:`pwd`/:"
- “不是有效WIN32程序”
写了个控制台,放到服务器上面运行,运行失败,出现"不是有效win32程序" 不知道原因. 猜测: 1.程序只支持64位的处理器,修改了项目的属性,发现支持any cpu.排除 2. ...
- Fisher vector for image classification
http://files.cnblogs.com/files/sylar120/fisher_vector.rar 拿各个参数上的偏导作为特征
- ES6学习笔记(2)
变量的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,被称为解构(Destructuring); 数组的解构赋值 let [a, b, c] = [1, 2, 3]; cons ...
- 转载:reactor模式学习
最近又重新看了下netty背后的设计思想,接触到了reactor模型.发现以前虽然也看过reactor和proactor模型的介绍,但是真的是只了解了个皮毛. 再重新学习了一遍,有了更深刻的认识.但是 ...
- 实数---Currency讲解
Currency 实际上是 Int64 的变体,Int64/10000 就是实际的值
- 贪吃蛇游戏C语言源代码学习
源代码下载地址为:www.clang.cc 阅读学习了源代码,并做了简单的注释和修改,里面只用了链表数据结构,非常适合C语言入门者学习阅读. 程序可在VS2013下编译运行. #include< ...
- CSS 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑
华文细黑:STHeiti Light [STXihei] 华文黑体:STHeiti 华文楷体:STKaiti 华文宋体:STSong 华文仿宋:STFangsong 俪黑 Pro:LiHei Pr ...
- 在Android中自定义捕获Application全局异常,可以替换掉系统的强制退出对话框(很有参考价值与实用价值)
转载自: http://blog.csdn.net/jdsjlzx/article/details/7606423