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设计模式 - 基础 - 封装 & 继承 & 多态
面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...
随机推荐
- 对.net 程序进行源码混淆
还是那个一卡通的程序,这几天做了一点更新. 因为里面涉及到对数据库的链接,含IP地址和账户密码,一旦被反编译窃取,则源码泄露不说,也给服务器带来一定的风险! 下载ILSpy程序,对自己开发的.net程 ...
- Listview的Item中有CheckBox、Button等的焦点处理
ListView的item布局中有CheckBox.Button等会获取焦点的控件会抢走焦点,造成ListView的item点击事件相应不了. 解决方法:控件设置 android:clickable= ...
- xcode8.0升级之后公司项目遇到的问题
xcode8升级之后项目遇到了问题,由于这个项目是我中途接手的,遇到的第三方也是自己没有用过的, AQGridViewCell,这个第三方的类主要是用于处理图片的问题,xcode开发工具升级过后,报这 ...
- Java web会话简单应用
Java会话主要分为两块:Cookie和HttpSessionCookie技术:会话数据保存在浏览器客户端.Session技术:会话数据保存在服务器端.一.下面介绍一下Cookie的应用1. Cook ...
- 多值(in),范围值(between..and)
多值检测 关键词[in] 查出年龄是23,24,28 的人员信息 select * from T_Employee where FAge in (23,25,28) in 后面如果跟子查询, ...
- 关于Redis的ACID
事务是一个数据库必备的元素,对于redis也不例外,对于一个传统的关系型数据库来说,数据库事务满足ACID四个特性: A代表原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全 ...
- 认识 EXT2 文件系统
认识ext文件系统 硬盘组成与分割 文件系统特性 Linux 的 EXT2 文件系统(inode) 与目录树的关系 EXT2/EXT3 文件的存取与日志式文件系统的功能 Linux 文件系统的运行 挂 ...
- WPF SpreadSheetGear电子表单
我们经常会碰到生成Excel 界面并在其上操作的功能开发. 比如如下界面,我们需要在菜单里添加一个菜单按钮"Columns To Rows Transform" 功能是对多列批量转 ...
- 使用shell脚本实现ping对应IP所对应的人名
#!/bin/bash a=(张三 李四 王五 赵六) ..} do . $((${i}+)) >dev/>&;then ))"号"${a[${i}]}&quo ...
- Morris post order traversal algorithm
Sept. 5, 2015 花时间把代码读明白, 比光看书强. 动手写代码, 改代码, 兴趣是最好的老师. 多记几个例子, 增加情趣. 举个例子关于中序遍历, 4 ...