c# 第35节 类的多态
本节内容:
1:多态前戏
2:解决多态的知识点
3:多态两个实例
1:多态前戏
多态源自生活中的现象:
阿拉甲,阿拉乙,阿拉丙,阿拉丁,是人这个类产生的四个对象;
他们的父亲说:世界上女的都是女老虎,你们可不要接近啊。。。。
但是他们四个做出了不同的反应:
阿拉甲:听了父亲的话,去做了和尚;
阿拉乙:听了父亲的话,去做了道士;
阿拉丙:也听了父亲的话,但是他不信,去找女老虎看它是不是女人,结果他挂了;
阿拉丁:很不听话,找了个女人度过一生。
总结:
多态就是同类物体,对相同情况的不同表现 :
关键字:同一类 、不同表现
c#中的多态如同现实中的多态一样也会出现这两部分内容:
(1)同一类物体:在面向对象中,这个“同一类”指的就是他们所属的父类。所以说c#中离不开继承这个概念 。
(2)不同表现是指同属于这个基类的所有子类在表现类的行为的时候有不同的表现;
2:解决多态必备知识点
在说多态的时候我们要解决两个知识点:
1:赋值
()相同类型对象之间是可以直接相互赋值,但是传递的是对象的地址而不是内容。
()子类的对象可以直接赋值给父类的对象
()父类的对象无法赋值给子类的对象,
()当子类的对象赋值给父类的对象的时候,父类对象只能看到本类内部的成员,而无法看到子类中的那些成员。
2:实现多态的实现方式:
(1)虚方法:
将父类的方法标记为虚方法,使用关键字virtual,此方法在子类可以重写(关键字override)
(2)抽象类与抽象方法 :
如果我们不需要使用父类创建的对象,他的存在只是为了供子类继承,我们可以将父类
写成抽象类(abstract),父类的方法也要修饰成(abstract),而子类还是使用override
(3)接口实现 (暂时不讲)
3:多态两个实例
1:职员需要有员工计划,经理也需要有工作计划。 这里我们经理呢也是员工的组成部分,所以员工类就是一个基类。经理去继承它。
ProjectManage类
class ProjectManage : Clerk
{
public override void workplan()
{
Console.WriteLine("我是一个经理,我有工作计划");
}
public void pmshow()
{
Console.WriteLine("this is pjshow");
}
}
Cleik类
class Clerk
{
public virtual void workplan() {
Console.WriteLine(@"我是一个员工,我有工作计划");
}
public void show() {
Console.WriteLine("this is test");
}
}
program类
class Program
{
static void Main(string[] args)
{
Clerk zs = new Clerk();
zs.workplan();
Clerk jl = new ProjectManage(); //将子类的对象传给父类声明,父类调用其中子类的方法;
jl.workplan();
jl.show(); //只能看到父类的中的方法,而无法看到子类中的成员
Console.ReadKey();
}
}
输出结果:
2:茶可以解渴,牛奶也可以解渴。 茶类和牛奶都不存在相互继承的关系,我们需要抽象化一个类出来。 让茶类和牛奶类都继承它;
drink类
abstract class drink //抽象abstract类,要求方法也是abstract 且不能有结构体;
{
public abstract void Func();
}
Tea类
class Tea : drink
{
public override void Func()
{
Console.WriteLine("茶叶可以解渴");
} }
Mile类
class Milk : drink
{
public override void Func()
{
Console.WriteLine("牛奶可以解渴");
}
}
Program类
class Program
{
static void Main(string[] args)
{
Tea mytea = new Tea();
Milk mymilk = new Milk();
drink [] _drink = {mytea,mymilk}; //将子类的实例化对象,赋值给drink类的数组中去 foreach (drink item in _drink) {
item.Func();
} Console.ReadKey();
}
}
输出:
c# 第35节 类的多态的更多相关文章
- 第二十九节:Java基础知识-类,多态,Object,数组和字符串
前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...
- Python类的多态的例子
1 # -*- coding: utf-8 -*- 2 # 类的多态 3 4 # 定义Person父类 5 class Person(object): 6 def __init__(self, nam ...
- Android零基础入门第35节:Android中基于回调的事件处理
原文:Android零基础入门第35节:Android中基于回调的事件处理 通过前面两期掌握了Android中基于监听的事件处理的五种形式,那么本期一起来学习Android中基于回调的事件处理. 一. ...
- .NET Core CSharp初级篇 1-6 类的多态与继承
.NET Core CSharp初级篇 1-6 本节内容为类的多态与继承 简介 终于讲到了面向对象三大特性中的两大特性--继承与多态.通过继承与多态,我们能很好的将类的拓展性发挥到了极致.在下面的内容 ...
- C# 类的多态、结构、接口、抽象、虚函数总结
多态: 类的多态是通过在子类(派生类)中重载基类的虚方法或成员函数来实现的. 可见,重载和虚函数的重写,并在调用时用父类装箱子类对象,是实现多态的一种重要的编程方式. 接口: 接口是一种用来定义程序的 ...
- Python 类的多态的运用
#类的多态的运用 #汽车类 class Car(object): def move(self): print("move ...") #汽车商店类 class CarStore(o ...
- day21-5 类的多态与多态性
类的多态与多态性 多态 多态指的是一类事物有多种形态,如动物有多种形态:人.狗.猪 import abc class Animal(metaclass=abc.ABCMeta): # 同一类事物:动物 ...
- Java类的多态机制
Java中将一个方法调用同一个方法主体关联起来被称作绑定. 绑定分为前期绑定和后期绑定.前期绑定是在编译器决定的,而后期绑定是在程序运行时决定的.Java中除了static方法和final方法(pri ...
- day18-Python运维开发基础(单继承 / 多继承 / 菱形继承、类的多态)
1. 单继承 / 多继承 / 菱形继承 # ### 继承 : 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法 """ 一个类可以继承另外一个类,那 ...
随机推荐
- WPF窗口传递 委托事件
1.子窗口定义委托事件 public delegate void Btn_Click(int i); public event Btn_Click BtnEvent; 在子窗口使用 BtnEvent( ...
- Leetcode 90. 子集 II
地址 https://leetcode-cn.com/problems/subsets-ii/ 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重 ...
- 【洛谷5368】[PKUSC2018] 真实排名(组合数学)
点此看题面 大致题意: 有\(n\)个数字,定义一个数的排名为不小于它的数的个数.现要随机将其中\(k\)个数乘\(2\),求对于每个数有多少种方案使其排名不变. 分类讨论 对于这种题目,我们可以分类 ...
- 【洛谷5363】[SDOI2019] 移动金币(动态规划)
点此看题面 大致题意: 有\(n\)个格子,让你摆放\(m\)个金币.二人博弈,每次选择一个金币向左移任意格,无法移动者输.问有多少种方案使先手必胜. 阶梯\(Nim\) 阶梯\(Nim\)的基本模型 ...
- AFO!
\(update:2019-12-13\) 成绩已经出了,我的OI生涯也算是正式结束了.虽然成绩并不满意,但好在也是收获了一个省一(虽然我不一定用).总的来说,作为正式选手不到两年半的OI之路走得并不 ...
- intellij idea从git检出代码并建立工程
1. 打开intellij idea,点击configure,settings 2. 左侧展开Version Control,点击Git,点击下图中红框中按钮 3. 在弹出窗口中找到git.exe,点 ...
- Python模块import本质是什么?import是什么
写这篇文章主要是对Python的import模块或包的机制有了更深层级的一个理解,也在具体工作中得到了一点实践,这种思考是由上一篇文章<__main__内置模块预加载Shotgun接口的妙用 ...
- 抓包工具之fiddler实战2-设置断点
Fiddler作为抓工具包,功能强大,作为代理服务器,可以对抓获到的请求或响应进行修改,然后模拟客户端发送新的请求或模拟服务器返回修改后的响应结果. Fiddler中设置断点修改Request Fid ...
- LeetCode 387: 字符串中的第一个唯一字符 First Unique Character in a String
题目: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. Given a string, find the first non-repeating charact ...
- Linux常用命令之文件编辑命令vim
vi命令 vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器.Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多 ...