今天我们来聊一聊继承,说实话今天也是我第一次接触。

继承的概念是什么呢?就是一个类可以继承另一个类的属性和方法(成员)

继承是面向对象编程中的一个非常重要的特性。

好了,废话不多说,下面切入正题:

1.首先我们定义一个子类,给它创建两个构造:一个无参构造和一个有参构造

定义一个枚举类

在定义的子类中它有自己独有的属性:

在定义的父类中的属性和构造:

在Main方法中:

同时要注意,在调用子类的带参构造时,我们要想到调用子类构造的时候,没有使用base关键字调用父类的指定的构造,默认调用父类的无参构造.

补充一下:

01.base代表父类对象,如果base():调用父类的构造函数

02.base代表的是方法调用,是不需要参数类型的

03.base(传参顺序和父类构造一致,变量名和子类构造参数一致)

2.在这里补充一点访问修饰符

我们所知道的:public  private  protected

下面我画一个图来简单的描述一下(√表示可以,×表示不可以)

当前类     子类     其他类(Program)
   private         √          ×        ×
   protected     √          √        ×
   public           √          √        √

总结:我们可以清晰的明白三种访问修饰符对类成员的访问限制强度:private>protected>public

3.new 子类底层原理图

我简单的用一个图来描述一下:

用文字描述:

1.走到子类构造,不进入构造体
   2.转向父类,进入父类构造体执行
   3.转回子类构造,执行子类构造体
   4.转到Main,内存中构建出子类对象

4.继承还具有两大特性这个我们也不要忘记了,就是单根性和传递性

单根性指的就是一个子类只有一个父类

传递性就是只要跟父类有继承关系,就可以使用父类的属性和方法

接下来我们讲一讲多态

1.多态是什么呢?字面上的意思就是多种形态

用专业一点的话来说就是指同一个操作作用于不同的对象时,可以有不同的解释,产生不同的执行效果。

我们所接触的方法重载也是多态的一种方式。

如何实现多态呢?不要急下面我来解说

(1)实现方法的重写

在父类中定义的方法,用virtual关键字来定义为虚方法

在子类中定义自己的方法,用override关键字来修饰,实现对父类的方法的重写

(2)定义父类变量,用子类变量初始化父类变量

是不是觉得抽象,其实我刚开始学习时也是一样的,下面来一个小案例:

//创建一个Person父类

public class Person
    {
       public virtual void SayHello()
       {

//父类特有的方法
           Console.WriteLine("父类打招呼方法");
       }
    }

//创建一个Korea子类

public class Korea:Person  //在这里要注意它继承于Person类
    {
       public override void SayHello()
       {
           Console.WriteLine("金喜善打招呼方法");
       }
    }

//创建一个Chinese类

public class Chinese:Person //在这里要注意它继承于Person类

{
       public override void SayHello()
       {
           Console.WriteLine("你好!");
       }
    }

//创建一个American类

public class American:Person   //在这里要注意它继承于Person类
    {
        public override void SayHello()
        {
            Console.WriteLine("Hello");
        }
    }

前面我们也学过泛型了下面我们就用泛型来存储

List<Person> list=new List<Person>();
            Chinese chinese=new Chinese();
            American usa=new American();
            Korea korea=new Korea();

list.Add(chinese);
            list.Add(usa);
            list.Add(korea);

下面我们可以用foreach来遍历

方式一:

foreach (Person person in list)
            {
               person.SayHello();
            }

方式二:

foreach (Person person in list)
            {

//方式二:不使用统一调用
                if (person is Chinese)
                {
                   Chinese chinese= person as Chinese;
                    chinese.SayHello();
                }

if (person is Korea)
                {
                    Korea chinese= person as  Korea;
                    korea.SayHello();
                }

if (person is  American)
                {
                    American chinese= person as  American;
                     american.SayHello();
                }

}

下面我再穿插个示例:

在Main方法中调用

上面的两种遍历你看明白了么?不明白也不要紧,之后的bolg中我们还会讲解

好了,我就讲到这里吧,我也是个初学者,只是把老师讲的和自己理解的用文字表述出来了,这是对我自己的一种成长!

C#中简单的继承和多态的更多相关文章

  1. [转] JS中简单的继承与多态

    这里讲了一个最最最简单的JS中基于原型链的继承和多态. 先看一下以下这段代码的实现(A是“父类”,B是“子类”): var A = function(){ this.value = 'a'; this ...

  2. java中封装,继承,多态,接口学习总结

    ### 一:封装java中封装是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问.要访问该类的代码和数据,必须通 ...

  3. Java中封装、继承和多态

    封装: 封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度. 适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性. 访问修饰符有public,private,prot ...

  4. python中封装、继承、多态

    又看到这个玩意,顺手写下来 面向对象三大特征: 封装:本质是将事物相关的属性和方法封装在一个类里面,我们调用类创建实例的时候,不用关心类内部的代码细节 继承:子类需要复用父类里面的属性或者方法,当然子 ...

  5. PHP的面向对象 — 封装、继承、多态

    K在上一次的基础篇中给大家介绍了一下关于PHP中数组和字符串的使用方法等,这一次,K决定一次性大放送,给大家分享一下PHP中面向对象的三大特性:封装.继承.多态三个方面的知识. 一.封装 在PHP中, ...

  6. Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现

    前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...

  7. c语言中继承和多态的简单实现

    C语言本身是不支持继承和多态的,但其实在 C 的世界里,有一套非常有名的面向对象的框架,用的也非常广,那就是 GObject,它是整个图形界面开发库 GTK 的基石,在IBM developerWor ...

  8. Objective-C中的继承和多态

    面向对象编程之所以成为主流的编程思想和他的继承和多态是分不开的,只要是面向对象语言都支持继承和多态,当然不同的OOP语言之间都有其特点.OC中和Java类似,不支持多重继承,但OOP语言C++就支持多 ...

  9. 网络电视精灵~分析~~~~~~简单工厂模式,继承和多态,解析XML文档,视频项目

    小总结: 所用技术: 01.C/S架构,数据存储在XML文件中 02.简单工厂模式 03.继承和多态 04.解析XML文档技术 05.深入剖析内存中数据的走向 06.TreeView控件的使用 核心: ...

随机推荐

  1. static关键字作用总结

    之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本会写到的static.final和static一样,都是一个小问题可以看到一个人的基础是否扎实以及平时是否 ...

  2. 用 C 扩展 python

    本文介绍如何用 C 语言来扩展 python.所举的例子是,为 python 添加一个设置字符串到 windows 的剪切板(Clipboard)的功能.我在写以下代码的时候用到的环境是:window ...

  3. 难道只有我一个人想吐槽npm这种包管理方式么

    实在忍不住吐槽 说实话有强迫症的我忍了很久了,实在是忍不住写篇文章来吐槽一下. 标题可能说的有点大了,我要吐槽的是:我可能只需要某一个小小的功能模块A,结果模块A依赖B-F这5个模块,然后B又依赖这1 ...

  4. git 修改管理

    查看修改: 撤销某一文件的修改(还没提交): 撤销所有文件的修改: git checkout .

  5. mac命令

    mac下卸载nodesudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}xc ...

  6. webservice5

    如何访问webservice . 三种方式我知道, 但是, 方式1 只说明了如何访问wsdl, 不知道如何调用,现在就是需要知道如何像下面url描述一样 , http get .post 方式调用ws ...

  7. excel怎么固定第一行

    这里给大家介绍一下怎么固定表格的第一行,或者说怎么固定表格的表头. 1.我这里有一个成绩表,希望固定住其第一行. 2.选择单元格A2 注意:你只需要选择所要固定行的下一行的任一单元格即可!!! 3.然 ...

  8. Flume日志采集系统——初体验(Logstash对比版)

    这两天看了一下Flume的开发文档,并且体验了下Flume的使用. 本文就从如下的几个方面讲述下我的使用心得: 初体验--与Logstash的对比 安装部署 启动教程 参数与实例分析 Flume初体验 ...

  9. Atitit dsl exer v3 qb3 新特性

    Atitit dsl exer v3 qb3 新特性 /atiplat_cms/src/com/attilax/dsl/DslParser.java V3 支持typeed参数,与简化的notyp参数 ...

  10. NET中Application,Session,Cookie,ViewState,Cache,Hidden 缓存机制 .

    Application 1.         Application用来保存所有用户共用的信息 2.         在Asp时代,如果要保存的数据在应用程序生存期内不会或者很少发生改变,那么使用Ap ...