C#中继承和多态
1.继承的概念
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用已存在的类的功能。
为了提高软件模块的可复用性和可扩充性,以便提高软件的开发效率,我们总是希望能够利用前人或自己以前的开发成果,同时又希望在
自己的开发过程中能够有足够的灵活性,不拘泥于复用的模块。C#这种完全面向对象的程序设计语言提供了两个重要的特性--
继承性inheritance 和多态性polymorphism。
继承是面向对象程序设计的主要特征之一,它可以让您重用代码,可以节省程序设计的时间。继承就是在类之间建立一种相交关系,使得
新定义的派生类的实例可以继承已有的基类的特征和能力,而且可以加入新的特性或者是修改已有的特性建立起类的新层次。
现实世界中的许多实体之间不是相互孤立的,它们往往具有共同的特征也存在内在的差别。人们可以采用层次结构来描述这些实体之间的
相似之处和不同之处。
在C#中,如果一个类后面通过冒号又跟了另外一个类,那么我们就称冒号前面的类
为子类,冒号后面的类为父类。这种书写类的方式放映出来的关系就称为类的继承关系。
子类:派生类
父类:基类或者超类
4.满足什么条件的类可以使用继承??
解析:满足is a关系的两个类可以使用继承。
案例:经理is a a 员工
程序员 is a 员工
学生 is a Person
5.如果new一个子类对象,那么有如下执行流程
01.先定位到子类对应构造函数,没有执行子类的方法体
02.转向了父类的无参构造函数,执行父类构造方法体
03.转向了子类的方法体继续执行。
点题的话:如果在子类构造中,没有使用base显示调用父类的构造,那么系统也会自动调用父类的无参构造
01.base代表父类对象,如果base():调用父类的构造函数
02.base代表的是方法调用,是不需要参数类型的
6.通过base调用父类构造函数注意点
解析:01.通过base调用父类构造函数只能书写在子类的构造后
02.通过base调用父类构造函数参数顺序和父类的构造参数一致
7.注意:方式一:new Student("张靓颖",20);
和方式二:new Student
{
Name="张靓颖",Age=20
}区别?
解析:最终都能实现对类中的属性赋值。
但是赋值的原理不同,
方式一:直接调用该类的带参构造赋值。
01.先通过无参构造创建出类的对象
02.对象名.属性名的方式赋值
8.访问修饰符
public:在任何位置都可以访问,甚至是跨程序集都可以访问。
private:只能当前类的花括号中访问。
protected:只能在当前类,当前类的子类,子类的子类(孙子类)中可以访问。
7.注意:方式一:new Student("张靓颖",20);
和方式二:new Student
{
Name="张靓颖",Age=20
}区别?
解析:最终都能实现对类中的属性赋值。
但是赋值的原理不同,
方式一:直接调用该类的带参构造赋值。
01.先通过无参构造创建出类的对象
02.对象名.属性名的方式赋值
8.访问修饰符
public:在任何位置都可以访问,甚至是跨程序集都可以访问。
private:只能当前类的花括号中访问。
protected:只能在当前类,当前类的子类,子类的子类(孙子类)中可以访问。
9.继承的传递性
如果一个类B继承自类A,而类C又继承类B,那么类C也可以访问到类A中非私有成员
10.继承的单根性 (C#不支持多继承 Java也不支持多继承)
在很久很久以前,有一个叫C++的家伙,他是支持多继承的语言,突然有一天,10个程序员用多继承,有9个都用错了,后续的Java和C#语言因此不再支持多继承。
在C#中,一个类只能有一个父类,C#和Java都不支持多继承。要想使用多继承,那么请您使用接口。。
11.遍历窗体上所有的控件,判断是不是文本框
foreach(Control c in this.Controls)
{
if(c is TextBox)
{
((TextBox)c).Text="";
}
}
is a 判断一个对象是否是某个类型。
12.继承的价值
01.模拟现实世界的关系
02.便于重用和扩展已彻底测试的代码,且无需修改
03.结构更清晰
13.多态
不同的对象对于同一个操作,做出的响应不同,那么这种情况在面向对象编程中就称为多态
使用多态的目的?
解析:使用多态就是为了统一调用
14.实现多态三种方式:
方式一:通过虚方法实现多态
实现多态的步骤
01.在父类中通过virtual关键字定义一个虚方法
02.在子类中通过override关键字对父类中的虚方法进行重写
03.调用的时候,调用的是子类的方法
目前为止,我们学了两种:
第一种:虚方法实现多态
通过在普通类Person中用Virtual关键字定义虚方法SayHello(),然后在子类Student中通过override关键字对父类的SayHello()方法进行重写。
如下:
Student类
Teacher类
在Main方法中调用
C#中继承和多态的更多相关文章
- [转]Java中继承、多态、重载和重写介绍
什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...
- c语言中继承和多态的简单实现
C语言本身是不支持继承和多态的,但其实在 C 的世界里,有一套非常有名的面向对象的框架,用的也非常广,那就是 GObject,它是整个图形界面开发库 GTK 的基石,在IBM developerWor ...
- python中继承和多态
继承和多态 继承 引入继承 我们有这样一个需求 模仿英雄联盟定义两个英雄类 1.英雄要有昵称.攻击力.生命值属性 2.实例化出两个英雄对象 3.英雄之间可以互殴,被殴打的一方掉血,血量小于0则判断为死 ...
- Java中继承与多态
Java类的继承继承的语法结构: [修饰符列表] class 子类名 extends 父类名{ 类体; }子类就是当前这个类,父类就是我们要复用的那个类java中只支持单继承 ...
- java中继承和多态的理解
继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父 ...
- golang学习--go中'继承'和多态
golang中没有继承的概念,这个struct属性上的继承,但是可以用匿名字段来模拟这个过程,方法上面的继承要使用接口.多态可以通过接口实现.可以看一下代码. package main import ...
- java中继承和多态
转自原文http://blog.csdn.net/xinxin19881112/article/details/2944760 若冒犯博主,请勿见怪! 1. 什么是继承,继承的特点? 子类继承父类的 ...
- Objective-C中的继承和多态
面向对象编程之所以成为主流的编程思想和他的继承和多态是分不开的,只要是面向对象语言都支持继承和多态,当然不同的OOP语言之间都有其特点.OC中和Java类似,不支持多重继承,但OOP语言C++就支持多 ...
- [转] JS中简单的继承与多态
这里讲了一个最最最简单的JS中基于原型链的继承和多态. 先看一下以下这段代码的实现(A是“父类”,B是“子类”): var A = function(){ this.value = 'a'; this ...
随机推荐
- silky微服务模块
目录 模块的定义和类型 在模块中注册服务 通过ServiceCollection实现服务注册 通过ContainerBuilder实现服务注册 使用模块初始化任务 使用模块释放资源 模块的依赖关系 构 ...
- 菜鸡的Java笔记 第二十六 - java 内部类
/* innerClass 从实际的开发来看,真正写到内部类的时候是在很久以后了,短期内如果是自己编写代码,几乎是见不到内部类出现的 讲解它的目的第一个是为了解释概念 ...
- Go语言核心36讲(Go语言实战与应用七)--学习笔记
29 | 原子操作(上) 我们在前两篇文章中讨论了互斥锁.读写锁以及基于它们的条件变量,先来总结一下. 互斥锁是一个很有用的同步工具,它可以保证每一时刻进入临界区的 goroutine 只有一个.读写 ...
- [hdu7081]Pty loves book
建立ac自动机,令$S_{x}$为以根到$x$的路径所构成的字符串以及$L_{x}=|S_{x}|,W_{x}=\sum_{1\le i\le m,t_{i}为S_{x}的后缀}w_{i}$,那么不难 ...
- BombEnemy(炸弹人)
// // Created by Administrator on 2021/7/25. // #ifndef C__TEST01_BOMBENEMY_HPP #define C__TEST01_BO ...
- final关键字、抽象类、抽象类和接口的区别
1.final关键字 1.1.final修饰的类无法继承. 1.2.final修饰的方法无法覆盖. 1.3.final修饰的变量只能赋一次值. 1.4.final修饰的引用一旦指向某个对象,则不能再重 ...
- 数字逻辑实践4->面向硬件电路的设计思维--FPGA设计总述
本文是对实验课上讲解的"面向硬件电路的设计思维"的总结,结合数字逻辑课本,进行提炼和整理. 主要来源是课件与本人整理,部分参考了网络大佬的博客. 本文主要介绍不同于之前软件设计思维 ...
- linux 两服务器之间的文件传输scp
Linux scp 命令用于 Linux 之间复制文件和目录. scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令. scp 是加 ...
- rabbit mq的一个实例,异步功能
简单的使用场景:消息队列的场景有:解耦,异步,削峰. 此例用的场景,异步 有时候会有请求消耗时间过长,不能老让用户等待返回结果,可以用消息队列来做异步实现,之前用过workmain等类似的异步,但不如 ...
- Perl哈希%hash
哈希是 key/value 键/值对的集合. Perl中哈希变量以百分号 (%) 标记开始. 访问哈希元素格式:${key}. 以下是一个简单的哈希实例: 实例 #!/usr/bin/perl %da ...