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设计模式 - 基础 - 封装 & 继承 & 多态
面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...
随机推荐
- Linux常用命令大全
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIO ...
- MPAndroidChart 3.0——LineChart(折线图)
显示效果 MPAndroidChart每一种图表的基本使用方式都基本相同 了解一种图表的实现 参考项目源码其他的图表也就差不多哩 在布局文件中定义 <com.github.mikephil.ch ...
- AndroidProjects个人项目归纳
AndroidProjects 个人总结归纳-目录大纲 Data Binding框架MVVM BaseView CollapseView 更新中... 项目地址:https://github.com/ ...
- 【代码笔记】iOS-正方形转换
一,工程图. 二,代码. RootViewControlle.m //点击任何处,页面翻转 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEven ...
- ubuntu关于引导修复[grub命令行][live linux]
第一种:grub命令行: ls 列出所有分区 ls /grub ls /grub 检查确认linux引导分区,如果linux单独/boot分区,就要采用如下命令进行检查: ls /boot/grub ...
- 【转】 XenServer架构之HA概述
一.XenServer HA概述 XenServer HA是一套全自动功能设计,规划,安全地恢复出现问题的XenServe 主机上的虚拟机的功能组件. 启用 HA 后,XenServer 将持续监视池 ...
- Linux网络编程-IO复用技术
IO复用是Linux中的IO模型之一,IO复用就是进程预先告诉内核需要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程进程处理,从而不会在单个IO上阻塞了.Linux中,提 ...
- 数据库 数据库SQL语句三
转换函数 to_char()字符串转换日期函数 --查询大于某个日期的员工信息 select * from emp where hiredate>to_date('1980-02-12','yy ...
- [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字
Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...
- [LeetCode] Permutations II 全排列之二
Given a collection of numbers that might contain duplicates, return all possible unique permutations ...