c#基础学习(0706)之使用虚方法实现多态
使用虚方法实现多态
namespace _0706
{
class Program
{
static void Main(string[] args)
{
//这个时候调用的是父类的方法
Person p = new Person();
Person p1 = new American();//这个时候调用的是American里面的方法
p.SayNationality(); //Person p1 = new Japanese();
Person[] pers = new Person[];
pers[] = new American();
pers[] = new Chanese();
pers[] = new Japanese();
pers[] = new Chanese();
pers[] = new American();
//遍历pers数组
for (int i = ; i < pers.Length; i++)
{
//判断数组类型
//if(pers[i] is American)
//{
// ((American)pers[i]).SayNationality();
//}else if(pers[i] is Chanese)
//{
// ((Chanese)pers[i]).SayNationality();
//}
//else if (pers[i] is Japanese)
//{
// ((Japanese)pers[i]).SayNationality();
//} //将上面的判断简化
pers[i].SayNationality();//这句话体现了多态,同样的方法,根据调用的对象不同,体现的内容
}
Console.ReadKey();
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
//添加一个SayNationality()方法
//第一步:将父类中的对应刚发前加virtual关键字,即:将对应的方法变成“虚方法”
public virtual void SayNationality()
{
Console.WriteLine("地球人");
}
}
public class American : Person
{
//通过使用override关键字将父类Person中的虚方法SayNationality重写为子类自己想要的。
//说出自己的国籍
public override void SayNationality()
{
Console.WriteLine("USA");
}
}
public class Japanese : Person
{
public override void SayNationality()
{
Console.WriteLine("日本");
}
}
public class Chanese : Person
{
public override void SayNationality()
{
Console.WriteLine("中国");
}
}
}
c#基础学习(0706)之使用虚方法实现多态的更多相关文章
- C#面向对象(四)虚方法实现多态
一.虚方法实现多态 1,创建一个people基类 using System; using System.Collections.Generic; using System.Linq; using Sy ...
- .net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串
1.继承(1)创建子类对象的时候,在子类对象中会为子类对象的字段开辟空间,也会为父类的所有字段开辟空间,只不过父类私有的成员访问不到(2)子类从父类继承父类所有的非私有成员,但是父类的所有字段也会创建 ...
- C#多态--虚方法实现多态
1.虚方法提供一种默认实现,子类可以选择是否重写,如果不重写,那么就使用父类已经实现的方法.(重写可以改变方法的指针) 如果需要改变类型指针,那么需要做方法的重写: 1.如果子类方法是重写方法,那么系 ...
- c#基础学习(0709)之vs通过抽象方法实现多态
抽象类不能用来实例化对象 1.抽象类中可以有实例成员,也可以有抽象成员 2.抽象成员不能有任何实现 3.抽象类.抽象成员必须包含在抽象类中 4.抽象类不能用来实例化对象,既然抽象类不能被实例化,那么抽 ...
- Python基础学习Day4 列表的使用方法、range 用法、in用法
一.列表 1.1列表:python基础数据类型之一:其他语言也有列表的概念,js 数组,可索引 ,可切片,可加步长 1.2列表的索引,切片,切片+ 步长 结果: 注意:列表里元素的数据类型,就是它本身 ...
- Java基础学习之数组基本属性和方法
数组对于每一门编程语言都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同.Java语言中提供的数组是用来存储固定大小的同类型元素.你可以声明一个数组变量,如 int[100] 来代替直接 ...
- java基础学习04(数组与方法)
数组与方法 一.完成的目标 1. 掌握数组的定义.使用方法.引用传递 2. 掌握方法及其方法的重载 3. 使用方法接收和返回一个数组 4. java新特性对数组的操作支持 二.数组的定义和使用 数组是 ...
- SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除
/*------------------------------------------------------------------------------+ #| = : = : = : = : ...
- jQuery基础学习8——层次选择器children()方法
$('body > div').css("background","#bbffaa"); //和children()方法是等价的,父子关系,和parent ...
随机推荐
- 记一次golang的实践
之前做过一个深交所股票数据的接存储软件,消息的协议是这样. 协议文档在这 https://wenku.baidu.com/view/d102cd0b4a73f242336c1eb91a37f111f ...
- NLayerAppV3-Infrastructure(基础结构层)的Data部分和Application(应用层)
回顾:NLayerAppV3是一个使用.net 2.1实现的经典DDD的分层架构的项目. NLayerAppV3是在NLayerAppV2的基础上,使用.net core2.1进行重新构建的:它包含了 ...
- SQL查询和替换含有回车,空格,TAB,等
---如下是查询语句 --查询名称有退格键 ),item_name) go --查询名称有制表符tab ),item_name) go --查询名称有换行 ),item_name) go --查询名称 ...
- Asp.Net从相对路径获取绝对路径的方法(不需要httpcontext上下文也可)
//如果拿不到当前HttpContext上下文的话可以用该方法取得绝对路径 var filePath = HostingEnvironment.MapPath("需要获取绝对路径 的 相对路 ...
- 基于Spring MVC的web应用随应用启动而加载
写个类实现org.springframework.context.ApplicationContextAware接口即可. 但是如下的程序会在启动时加载两次: @Controller public c ...
- C++实现文件自校验的一种方法
#include <iostream> #include <stdio.h> extern long FileSizeof(char *); int main() { if(F ...
- Java自学路线
万事开头难,学习Java亦是如此.而在学习的开始,选择正确的学习路线更是尤为重要.在本文中我将分享本人自学转行路上的学习路线,希望能给想自学,却不知道方向的同学带来帮助~ 1 .JavaSE 基础 这 ...
- JDK源码学习之 java.util.concurrent.automic包
一.概述 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CP ...
- servlet中request和response
一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...
- 浅析js中取绝对值的2种方法
1.abs() var aaa=-20; var bbb=Math.abs(aaa); 2.加减法 var aaa=-20; var bbb=-aaa