C#第七天
一
1.继承:我们可能会在一些类中,写一些重要的成员,将这些重复的成员单独的封装到一个类中,作为这些类的父类。
Student Teacher Driver 子类 也叫派生类
Person 父类 也叫基类
子类继承了父类,那么子类从父类那里继承过来了什么
首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
2.子类不能继承父类的构造函数,但是,子类会默认的调用父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员。
所以,如果父类中重新写了一个有参数的构造函数之后,那么无参数的就被干掉了。
子类就掉用不到了,所以子类会报错。
解决方法:
1.在父类中重新写一个无参数的构造函数。
2.在子类中显示父类的构造函数,使用关键字:base()
3.继承的特性
1).继承的单根性:一个子类只能继承继承一个父类。
2).继承的传递性。
4. object是所有类的基类。
5.new关键字
1)、创建对象
2)、隐藏从父类那里继承过来的同名成员。
隐藏的后果就是子类调用不到父类的成员。
二
里氏转换法:
1、里氏转换
1)、子类可以赋值给父类
2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。
2、
子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。
3、
is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null
static void Main(string[] args)
{
//1、里氏转换
//1)、子类可以赋值给父类,如果有一个地方需要父类作为参数,我们可以给一个子类来代替
//Student s = new Student();
//Person p = s;
Person p = new Student();
//string str = string.Join("|", new string[]{"1","2","3","4"});
//Console.WriteLine(str);
//Console.ReadKey();
//2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。
//if (p is Student)
//{
// Student ss = (Student)p;
// ss.StudentSayHello(); //}
//else
//{
// Console.WriteLine("转换失败");
//}
//as用法
Student t=p as Student;
t.StudentSayHello(); Console.ReadKey();
}
public class Person
{
public void PersonSayHello()
{
Console.WriteLine("我是父类");
}
}
public class Student : Person
{
public void StudentSayHello()
{
Console.WriteLine("我是学生");
}
}
public class Teacher:Person
{
public void TeacherSayHello()
{
Console.WriteLine("我是老师");
}
}
里氏转换小练习:
namespace 里氏转换法练习
{
class Program
{
static void Main(string[] args)
{
//创建一个对象,通过一个循环,来调用他们打招呼的方法
//Student s = new Student();
//Person p = new Person();
//ShuaiGuo sg = new ShuaiGuo();
Person[] pers = new Person[];
Random r = new Random();
for (int i = ; i < pers.Length; i++)
{
int rNumber = r.Next(, );//产生一个1-6的随机数;
switch (rNumber)
{
case : pers[i] = new Student();
break;
case : pers[i] = new Teacher();
break;
case : pers[i] = new ShuaiGuo();
break;
case : pers[i] = new MeiNv();
break;
case : pers[i] = new YeShou();
break;
case : pers[i] = new Person();
break;
}
}
for (int i = ; i < pers.Length; i++)
{
if (pers[i] is Teacher)
{
((Teacher)pers[i]).TeacherSayHi();
}
else if (pers[i] is YeShou)
{
((YeShou)pers[i]).YeShouSayHi();
}
else if (pers[i] is MeiNv)
{
((MeiNv)pers[i]).MeiNvSayHi();
}
else if (pers[i] is Student)
{
((Student)pers[i]).StudentSayHi();
}
else if (pers[i] is ShuaiGuo)
{
((ShuaiGuo)pers[i]).ShuaiGuoSayHi();
}
else
{
pers[i].PersonSayHi();
}
}
Console.ReadKey();
} }
public class Person
{
public void PersonSayHi()
{
Console.WriteLine("我是人类");
}
}
public class Student : Person
{
public void StudentSayHi()
{
Console.WriteLine("我是学生");
}
}
public class Teacher : Person
{
public void TeacherSayHi()
{
Console.WriteLine("我是老师");
}
}
public class MeiNv : Person
{
public void MeiNvSayHi()
{
Console.WriteLine("我是美女");
}
}
public class ShuaiGuo : Person
{
public void ShuaiGuoSayHi()
{
Console.WriteLine("我是帅锅");
}
}
public class YeShou : Person
{
public void YeShouSayHi()
{
Console.WriteLine("我是菜狗");
}
}
}
C#第七天的更多相关文章
- 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文
阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...
- CRL快速开发框架系列教程七(使用事务)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 《LoadRunner12七天速成宝典》来了
看到自己的新书又要发行了,算算从09年第一本书开始,不知不觉已经是第四本书了(帮朋友合写的书不算),每次写完之后都会说太累了,不想再写了,但是却又次次反悔,吞下食言的苦果.如果非要说第四本书的感受,那 ...
- 【SAP业务模式】之ICS(七):IDOC配置
这是ICS业务模式系列的最后一篇了,主要讲解IDOC的配置. 一.指定EDI传输的供应商逻辑地址 事务代码:WEL1 注意:上面逻辑地址是生产公司+内部客户.有以下两种情形: 1.如果内部客户都是纯数 ...
- 我的MYSQL学习心得(七) 查询
我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- Nodejs之MEAN栈开发(七)---- 用Angular创建单页应用(下)
上一节我们走通了基本的SPA基础结构,这一节会更彻底的将后端的视图.路由.控制器全部移到前端.篇幅比较长,主要分页面改造.使用AngularUI两大部分以及一些优化路由.使用Angular的其他指令的 ...
- Go语言实战 - 网站性能优化第一弹“七牛云存储”
由于用户纷纷反应山坡网的打开速度比较慢,所以两天前我们决定把服务器从linode迁移到阿里云. 整个迁移过程非常平滑,基本上一个小时就完成了.而且阿里云的配套设施提供的也很不错,运行状态监控什么的都有 ...
- redis成长之路——(七)
扩展性封装 虽说现在StackExchange.Redis免费,万一到时候和servicestack.redis一样要收费呢,所以先留一口,后续的可以再处理 实例代码点击这里查看 redis成长之路- ...
- discuz接入七牛sdk
自己摸索了几天,找群里面的人各种问,都没有一个人回答我,哎,国内的开源精神呢...... 需要修改有以下几个: 1.替换 /source/class/class_core.php 文件 解释:就 ...
- ITTC数据挖掘平台介绍(七)强化的数据库, 虚拟化,脚本编辑器
一. 前言 好久没有更新博客了,最近一直在忙着找工作,目前差不多尘埃落定.特别期待而且准备的都很少能成功,反而是没怎么在意的最终反而能拿到,真是神一样的人生. 言归正传,一直以来,数据挖掘系统的数据类 ...
随机推荐
- Web流量劫持
BadTunnel实战之远程劫持任意内网主机流量 http://www.freebuf.com/articles/web/109345.html http://blog.csdn.net/ts__cf ...
- Postman使用教程学习笔记
刚加入网页测试行列,最近在学习POSTman的使用教程,记录下学习笔记. Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.当开发人员需要调试一个网页是否运行正常,并不是 ...
- jdk7 HashSet和HashMap源码分析
先来看看HashMap的一些成员变量以及他们的含义 /** * The default initial capacity - MUST be a power of two. */ static fin ...
- struts2查询的数据的存放
当我们查询数据的时候,把它存放到一个位置.以供页面显示. 1:使用***Map取代内置对象存放 public String query(){ ActionContext.getContext().pu ...
- C++友元
通过friend关键字,我们可以将不属于当前类的一个函数在当前类中加以声明,该函数便可以成为当前类的友元函数. 例1: #include<iostream>using namespace ...
- mssql update from
update b set memo = a.name from a,b where a.id = b.id --mssql的update :from语法 2 --a表 b表 结构分别 id ,name ...
- 安装TensorFlow的步骤
安装步骤: 1.安装虚拟机: 2.安装liunx系统: 3.安装TensorFlow. 1.安装虚拟机:虚拟机的版本是不能太低的.我使用的是:VMware-workstation-full-12.0. ...
- Servlet之保存用户偏好设置简单功能的实现
写在前面: 先来陈述一下为什么会有这样一个需求和这篇博文. 这是公司的一个项目,我们负责前端,后台服务由其他公司负责.该系统有一个系统偏好设置模块,用户可以设置系统的背景图片等系统样式,因为这是一个比 ...
- android studio导入第三方源码模块
从网上得到的但三方源码模块,如果直接导入到自己的项目里的时候,可能需要比较长的时间,甚至不成功. 在导入之间,还是应该将模块里的 build.gradle 编辑一下,使其与自己的android stu ...
- HTML5入门总结 HTML5API
w3cshools MDN英文 MDN中文 HTML5 HTML5 is the latest evolution of the standard that defines HTML. The t ...