zoukankan      html  css  js  c++  java
  • 25 C#类的继承

    继承是面向对象编程的一个重要特性。任何类都可以从另一个类中继承,这就是说,这个类拥有它继承的类的所有成员。在OOP 中,被继承的类称为父类(也称为基类)。注意,C#中的对象仅能直接派生于一个基类,当然基类也可以有自己的基类。

    类的继承一个重要作用是子类可重用父类的代码。这样就可以在一个地方集中维护一份代码,避免了很多的重复的代码。比如我们已经有一个Car类。在这个Car中有两个最基本的方法启动发动机和停止发动机 (1)startEngine();(2)StopEngine();

    class Car
        {
            public int StartEngine()
            {
                //启动发动机的代码
                return 0;
            }
    
            public int StopEngine()
            {
                //停止发动机的代码
                return 0;
            }
        }

    这时候我们的系统需要有两个新类,ModelACar和ModelBCar。它们都需要同样的启动发动机和停止发动机功能。除此之外,每个类还都有自己特殊的功能。如果没有继承,我们怎么办呢?很简单啊,把Car类中的这两个方法copy过来就可以了。

    class ModelACar
        {
            public int StartEngine()
            {
                //启动发动机的代码
                return 0;
            }
    
            public int StopEngine()
            {
                //停止发动机的代码
                return 0;
            }
    
            public void ModelAFucntion1()
            {
    
            }
    
            public void ModelAFucntion2()
            {
    
            }
    
        }
    
        class ModelBCar
        {
            public int StartEngine()
            {
                //启动发动机的代码
                return 0;
            }
    
            public int StopEngine()
            {
                //停止发动机的代码
                return 0;
            }
    
            public void ModelBFucntion1()
            {
    
            }
    
            public void ModelBFucntion2()
            {
    
            }
        }

    现在问题就来了,如果有十种新的类都需要Car类中同样的启动和停止发动机的方法,那你怎么办?在十个类中都copy同样的代码吗?可以。但是很烦啊。尤其是以后修改维护的时候,更烦。少改了一个地方,就会出问题。所以继承就是来帮我们解决这样的问题。我们只需要新的类继承Car类就可以了。新的类自动就有了Car类的全部方法。

    继承的语法和简单。

    class 子类的名字 : 父类的名字
    
    {
    
    }

    使用继承后,ModelACar和ModelBCar的代码变成这样了。

    class ModelACar : Car
        {
            
            public void ModelAFucntion1()
            {
    
            }
    
            public void ModelAFucntion2()
            {
    
            }
    
        }
    
        class ModelBCar : Car
        {
           
            public void ModelBFucntion1()
            {
    
            }
    
            public void ModelBFucntion2()
            {
    
            }
        }

    但是我们同样可以在ModelACar和ModelBCar 中访问StartEngine和StopEngine方法。

    在继承一个父类时,成员的可访问性就成了一个重要的问题。子类不能访问父类的私有成员,但可以访问其公共成员。不过,子类和外部的代码都可以访问公共成员。这就是说,只使用这两个可访问性,不能让一个成员可由父类类和子类访问,而不能由外部的代码访问。


    为了解决这个问题,C#提供了第三种可访问性:protected,只有子类才能访问父类的protected 成员。对于外部代码来说,这个可访问性与私有成员一样:外部代码不能访问private 成员和protected 成员。

    来开一个具体的例子吧。你创建一个项目。解决方案名称为Sloution24,项目名称为Exercise24,项目类型为控制台程序。

    新建三个类文件,名称分别为Car,ModelACar,ModelBCar。

    点击Car.cs。修改代码如下。

    点击ModelACar.cs。修改代码如下。

    点击ModelBCar.cs。修改代码如下。

    点击Program.cs。修改代码如下。

    运行结果

    练习
     
      

      1. 读懂这段代码,为每条语句加上注释,解释它的功能。

      2. 新建一个ModelCCar类,让它继承Car类。在main方法中新建一个ModelCCar类的对象,调用startEngine和StopEngine方法。

      3. 修改Car类的StartEngine和StopEngine方法。例如多输出几行字符。运行程序,看看对ModelACar和ModelBCar调用StartEngine和StopEngine方法有影响吗?

      4. 修改Car类的字段和方法的public访问限制符为private。运行程序,看看是什么结果?解释一下原因是什么?

      5. 在main方法中可以调用Car类的TestEngine方法吗?为什么?怎样修改才能调用?

      6. 新建一个ModelDCar类,让它继承ModelACar类。在main方法中新建一个ModelDCar类的对象,看看都能调用什么方法。分别调用一些试试看。


    付费解答C#入门学习过程中碰到的各种问题。

    零基础学习C#入门,大多数的问题都可以通过自学或借助互联网解决。

    但是还是会有一些问题,不是那么容易解决,成为了你学习的绊脚石。最后甚至造成你学习的半途而废。通常学习C#编程入门,你会遇到20到30多个你不能很容易解决的问题。

    这个时候,你最需要什么呢?

    对!一个专业的老师给你帮助!

    你在学习本课程中,遇到任何问题都可以通过qq或email想本教程作者进行求助。

    只需30元你就可以得到本教程作者的三次专业解答。所以你只需不到300元就可以顺利的完成C#入门,从此推开软件行业的大门。

    付费方式非常简单:

    用微信扫描下面的二维码。在付款留言中留下你的qq号或email地址就可以啦。

    教育不是要便宜,而是要可靠!真正聪明的人,更懂得花钱让专业的人为自己服务,提高自己的效率。

    老师qq:2040227296

    老师email:2040227296@qq.com

  • 相关阅读:
    ThinkPHP5+Bootstrap的极速后台开发框架。
    window 下要运行php,需要编辑php环境变量
    Mui 底部导航切换
    chrome 监听touch类事件报错:无法被动侦听事件preventDefault
    HBuilder开发MUI web app溢出页面上下无法滚动问题
    D建立app项目(mui)
    宝塔linux面板,phpmyadmin进不去的处理方法
    mysql密码重置
    mysql5.6安装以及密码重置
    linux安装软件命令
  • 原文地址:https://www.cnblogs.com/thinking-jiang/p/5684048.html
Copyright © 2011-2022 走看看