C#中简单的继承和多态

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

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

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

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

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中我们还会讲解

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

时间: 2024-08-27 00:03:49

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

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)最近进行数据库操作,遇到一个问题,就是大量删除一个数据表中的数据后,由于设定了id是自增的,导致再插入时,默认生成的id会很大,这个时候想要再次插入新的数据,应该怎么办呢?1.明确目前最后一个id的大小select id from tags order by id DESC limit 0,1; 假设返回的是9,则设置数据表从10开始自增 2.修改这个数据表从10开始自增alter table tags auto_increme

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

### 一:封装java中封装是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问.要访问该类的代码和数据,必须通过严格的接口控制.封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段.适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性.***封装的优点***    1  良好的封装能够减少耦合.    2 类内部的结构可以自由修改.     3 可以对成员变量进行更精

PHP中面向对象的继承和多态基本用法

Extends 继承: 特点:单继承 一个子类只能有一个父类,一个父类可以有多个子类 例子: Class Ren { Public $name; Public $sex; Public $yuyan; Function say() { Echo $this->name.”正在讲话”: } } 美国人的子类: Class amercia extends Ren { Function say() { Parent::say();    调用父类的say()方法 Echo “hello”;    子类

vb中的封装,继承,多态的实现。

        VB中引入了面向对象的编程机制,使该语言具有面向对象语言的封装.继承和多态三个主要的特征,极大地提高了应用程序的开发效率.但是大多数面向对象的设计语言都通过继承来提供多态的,而vb是通过多从ActiveX接口来提供多态的.         在上一篇文章中我简单的描述了vb中的类与对象,类,对象,对于继承与多态来说是比不可少的,下面我谈一下vb中封装,继承,多态的实现.         1. 封装         从表面意思上看就是将某些东西给打包封起来,vb中的封装与这个意思大致

C中的继承和多态

1.引言 继承和多态是面向对象语言最强大的功能.有了继承和多态,我们可以完成代码重用.在C中有许多技巧可以实现多态.本文的目的就是演示一种简单和容易的技术,在C中应用继承和多态.通过创建一个VTable(virtual table)和在基类和派生类对象之间提供正确的访问,我们能在C中实现继承和多态.VTable能通过维护一张函数表指针表来实现.为了提供基类和派生类对象之间的访问,我们可以在基类中维护派生类的引用和在派生类中维护基类的引用. 2.说明 在C中实现继承和多态之前,我们应该知道类(Cl

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

K在上一次的基础篇中给大家介绍了一下关于PHP中数组和字符串的使用方法等,这一次,K决定一次性大放送,给大家分享一下PHP中面向对象的三大特性:封装.继承.多态三个方面的知识. 一.封装 在PHP中,封装可以用三个子来概括:私有化.具体来说,是通过访问修饰符,将类中不需要外部访问的属性和方法进行私有化处理,来实现访问控制. 那么封装的作用是什么?封装的作用主要有两点,一是方法封装,即将使用者关注的功能暴露,而隐藏其他使用者用不到的功能:二是属性封装,即对用户的数据进行控制,防止不合法的数据传输设

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

C语言本身是不支持继承和多态的,但其实在 C 的世界里,有一套非常有名的面向对象的框架,用的也非常广,那就是 GObject,它是整个图形界面开发库 GTK 的基石,在IBM developerWorks上有一篇很好的文章介绍 GObject<GObject对象系统>.另外,在 Linux 内核里面也大量使用了面向对象的思想,比如虚拟文件系统,设备驱动等模块,在 lwn上有两篇文章就讲到了内核中的面向对象,详细请看:<Object oriented design patterns in

[转]Java中继承、多态、重载和重写介绍

什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方式,产生一个新的类型.继承是面向对象的三个基本特征--封装.继承.多态的其中之一,我们在使用JAVA时编写的每一个类都是在继承,因为在JAVA语言中,java.lang.Object类是所有类最根本的基类(或者叫父类.超类),如果

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

小总结: 所用技术: 01.C/S架构,数据存储在XML文件中 02.简单工厂模式 03.继承和多态 04.解析XML文档技术 05.深入剖析内存中数据的走向 06.TreeView控件的使用 核心:通过该项目,我们对业务流程有一个整体把控.对继承和多态有深入的了解 下面是类图: 主界面图: 核心思路: 1   1.首先在频道管理类ChannelManager中写一个加载所有频道方法LoadAllChannel; 2   3        该方法作用读取FullChannels.xml文件,并且