/**
  特性:
    单根性:一个子类只能有一个父类
    传递性:爷爷类 爹类 儿子类
  里氏转换
    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#基础强化-继承与多态的更多相关文章

  1. C++_基础_继承、多态

    内容: (1)子类中的拷贝构造和拷贝赋值 (2)多继承和虚继承 (3)多态的初识 (4)虚析构的特性和使用 (5)多态的底层实现 (6)纯虚函数.抽象类的概念 1.子类中的拷贝构造和拷贝赋值 子类中的 ...

  2. python基础——继承和多态

    python基础——继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类 ...

  3. C#基础总结之八面向对象知识点总结-继承与多态-接口

    .方法深入讲解(返回值,形参与实参) 方法 public int getName(int i,int j) { int sum = i + j; return sum; } .利用泛型存储对象数据 . ...

  4. Java学习之旅基础知识篇:面向对象之封装、继承及多态

    Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...

  5. JAVA基础——面向对象三大特性:封装、继承、多态

    JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...

  6. 【JAVA零基础入门系列】Day13 Java类的继承与多态

    继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...

  7. Java基础知识回顾之三 ----- 封装、继承和多态

    前言 在上一篇中回顾了java的修饰符和String类,这篇就来回顾下Java的三大特性:封装.继承.多态. 封装 什么是封装 在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部份包装 ...

  8. [ Java学习基础 ] Java的继承与多态

    看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...

  9. Python设计模式 - 基础 - 封装 & 继承 & 多态

    面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...

随机推荐

  1. 基于位图(Bitmap、BitmapData)的图片处理方法(C#)

    目前操作位图的主流方法有三种: 1.基于Bitmap像素的处理方法,以GetPixel()和SetPixel()方法为主.方法调用简单,但是效率偏低. 2.基于内存的像素操作方法,以System.Ru ...

  2. CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout使用

    本文介绍Design Support Library中CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout的使用. 先列出了Design S ...

  3. 自定义UITableViewCell实现左滑动多菜单功能LeftSwipe

    今天愚人节,小伙们,愚人节快乐! 实现一个小功能,滑动菜单,显示隐藏的功能菜单, 先上图:                       这里尝试用了下使用三个方式来实现了这个功能: 1.使用自定义UI ...

  4. iOS项目分析及优化

    iOS项目分析及优化  来源:吴白的简书   从代码看一个程序员的笔力 从代码的整洁度上就可以看出一个程序员的实力,规范其实就是让你养成一种良好习惯的标杆,在此面前我们应该顺从.本篇我们以OC为例,统 ...

  5. Dagger2 (二) 进阶篇

    一.作用域Scope 之前了解RoboGuice的时候,我们知道它默认给我们提供了几个注解,ContextSingleton和Singleton,但是Dagger2更为灵活,只有javax包中提供的S ...

  6. 幼儿园的 selenium

    from selenium import webdriver     *固定开头     b=webdriver.Firefox()              *打开火狐浏览器    browser. ...

  7. Java 根据经纬度计算两点之间的距离

    package xxx.driver.business.utils; /** * <p>Represents a point on the surface of a sphere. (Th ...

  8. Oracle分区索引

    索引与表类似,也可以分区: 分区索引分为两类: Locally partitioned index(局部分区索引) Globally partitioned index(全局分区索引) 下面就来详细解 ...

  9. SQL优化 查询语句中,用 inner join 作为过滤条件和用where作为过滤条件的区别

    前段时间遇到一个存储过程,参数之一是一个字符串,在存储过程中,把字符串拆分成一个临时表之后存为一个key值的临时表,作为其中一个查询条件, 逻辑实现上有两种处理方式 insert into #t se ...

  10. 树莓派3B远程VNC的设置(包括开机启动)

    可以说,现在很少有自带VNCserver的教程 因为之前 官方系统没有自带VNC  但是 现在  最新版的官方系统已经自带VNCserver 只需要在设置里启用一下,然后设置就可以用啦. 别的教程都是 ...