C#基础强化-继承与多态
/**
特性:
单根性:一个子类只能有一个父类
传递性:爷爷类 爹类 儿子类
里氏转换
1、子类可以赋值给父类
2、如果父类装的是子类对象,则可以将这个父类转换为对应的子类 is as 关键字
-->关键字
1、is:返回bool类型,指示是否是这个类型
2、as:如果转换成功返回对象,否则返回null
作用:我们可以将所有的子类当做是父类来看,针对父类进行编程,写出通用代
码,适应需求的不断改变
多态:
-->虚方法
virtual override
-->抽象类
abstract override
-->接口
interface
*/
普通类的继承
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; /**
继承中的非多态方式,很恶心人吧
虚方法和抽象方法就是为了解决这个问题的
*/
namespace 普通类的继承 {
class Program {
static void Main(string[] args) {
passen[] pas = { new Liuguan(), new Wangming() };
foreach(passen item in pas) {
if(item is Liuguan) {
(item as Liuguan).Function();
}
if(item is Wangming) {
(item as Wangming).Function();
}
//item.Function();该方式,打印出来都是"我是人"
}
Console.ReadLine();
}
}
class passen {
public void Function() {
Console.WriteLine("我是人");
}
}
class Liuguan : passen {
public new void Function() {
Console.WriteLine("我是刘冠");
}
}
class Wangming : passen {
public new void Function() {
Console.WriteLine("我是王明");
}
}
}
抽象类的继承
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 抽象类的继承 {
class Program {
static void Main(string[] args) {
//多态,父类可指向子类对象
//子类可以赋值给父类,但调不出子类新增方法,反之不可
animal[] ani = { new Cat(), new Dog(), new Pig() };
foreach(animal item in ani) {
item.Bark();
if(item is Cat) {//判断类型
Cat tempItem = (Cat)item;
tempItem.TextFunction();
//两个等价
Cat tempItem2 = item as Cat;
tempItem2.TextFunction();
}
} Console.ReadLine();
}
}
//抽象类,抽象方法
abstract class animal {
public abstract void Bark();//抽象方法包含于抽象类中类,应用场景:父类没有办法如何确定子类如何去实现 }
//一个子类继承了一个抽象类,那么这个子类必须重写这个抽象父类中的所有成员
class Cat : animal {
public override void Bark() {//子类重写父类方法
Console.WriteLine("cat");
}
public void TextFunction() {
Console.WriteLine("测试方法");
}
}
class Dog : animal {
public override void Bark() {//子类重写父类方法
Console.WriteLine("dog");
}
public void TextFunction() {
Console.WriteLine("测试方法");
}
}
class Pig : animal {
public override void Bark() {//子类重写父类方法
Console.WriteLine("pig");
}
public void TextFunction() {
Console.WriteLine("测试方法");
}
}
}
虚方法类的继承
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 虚方法类的继承 {
class Program {
static void Main(string[] args) {
person[] per = { new Liuguan(), new Wangming() };
foreach(person item in per) {
item.Function();
}
Console.ReadLine();
}
}
class person {
public virtual void Function() {//虚方法
Console.WriteLine("我是人");
}
}
class Liuguan : person {
public override void Function() {
// base.Function();
Console.WriteLine("我是刘冠");
}
}
class Wangming : person {
public override void Function() {
// base.Function();
Console.WriteLine("我是王明");
}
} }
C#基础强化-继承与多态的更多相关文章
- C++_基础_继承、多态
内容: (1)子类中的拷贝构造和拷贝赋值 (2)多继承和虚继承 (3)多态的初识 (4)虚析构的特性和使用 (5)多态的底层实现 (6)纯虚函数.抽象类的概念 1.子类中的拷贝构造和拷贝赋值 子类中的 ...
- python基础——继承和多态
python基础——继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类 ...
- C#基础总结之八面向对象知识点总结-继承与多态-接口
.方法深入讲解(返回值,形参与实参) 方法 public int getName(int i,int j) { int sum = i + j; return sum; } .利用泛型存储对象数据 . ...
- Java学习之旅基础知识篇:面向对象之封装、继承及多态
Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...
- JAVA基础——面向对象三大特性:封装、继承、多态
JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...
- 【JAVA零基础入门系列】Day13 Java类的继承与多态
继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...
- Java基础知识回顾之三 ----- 封装、继承和多态
前言 在上一篇中回顾了java的修饰符和String类,这篇就来回顾下Java的三大特性:封装.继承.多态. 封装 什么是封装 在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部份包装 ...
- [ Java学习基础 ] Java的继承与多态
看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...
- Python设计模式 - 基础 - 封装 & 继承 & 多态
面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...
随机推荐
- Atitit 软件国际化原理与概论
Atitit 软件国际化原理与概论 语言和文化习俗因地域不同而差别很大.对某一特定的地域的 语言环境称为"locale".它不仅包括语言和货币单位,而且还包括 数字标示格式, 日期 ...
- Android WebView 302斗争之旅
一.背景 越来越多的业务接入,项目内多多少少会出现几个H5页面,只是单纯的提供WebView容器接入H5页面根本满足不了需求,他们需要登录态,需要制定协议控制Native的导航栏,或者需要JsBrid ...
- C#接口的显示和隐式实现
早上骑车上班走到半路发现手机忘带了,这年代兜里没装一分现金,吃饭都要刷手机,上班时间无聊了不能玩手机更是大问题,所以果断掉头拿手机.取完手机刚出门看这天阴沉沉的貌似要下雨,没雨衣,骑车又不能打伞,上次 ...
- 读取properties配置文件的方法
一般在.properties文件中配置数据库连接的相关信息,我们需要从中读取信息,以便建立与数据库的连接. 文件目录: application.properties配置信息: url=jdbc:ora ...
- nth-of-type在选择class的时候需要注意的一个小问题
查了下w3和MDN的手册,没发现有这个说明,写篇随笔记下. 1..class:nth-of-type(n)在选择class的时候,如果在class前面插入x个同类型标签,n需要加上x <!DOC ...
- [转]C# 使用Nlog记录日志到数据库
本文转自:http://www.cnblogs.com/weixing/archive/2013/04/26/3044422.html 摘要]Nlog是一个很不错的.NET日志记录组件,它可以将日志输 ...
- 【转】C# 中 10 个你真的应该学习(和使用!)的功能
如果你开始探索C#或决定扩展你的知识,那么你应该学习这些有用的语言功能,这样做有助于简化代码,避免错误,节省大量的时间. 1)async / await 使用async / await-pattern ...
- mininet中iperf sever自动退出
使用iperf 在mininet进行吞吐量测试是常用的方法,之前结束iperf server的方法是运行os.system('pkill iperf')命令. 但是这种方式iperf server有可 ...
- flex自适应高度内容高度超出容器高度自动出现滚动条的问题
在容器中设置 flex-grow:2; overflow-y:auto;overflow-x:hidden;容器高度自适应. 内容高度不固定,无法出现滚动条,然后在容器中添加height:0,出现滚动 ...
- mysql benchmark基准测试
git项目地址: https://github.com/akopytov/sysbench 利用sysbench很容易对mysql做性能基准测试(当然这个工具很强大,除了测试主流数据库性能,还能测试其 ...