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

    1、什么是继承

      为了能够合理描述自然界的规律,面向对象的编程中引入了继承的概念,它是面向对象编程中最重要的概念之一,定义了一个如何根据现有类创建出新类的过程。任何类都可以从另外一个类继承。继承遵循的原则是:一个派生出来的子类具有这个类所有的公共属性和方法。

      c#提供了类的继承的机制,创建新类锁根据的基础称为基类或父类,新建的类则称为派生类或子类。面向对象编程中,继承遵循代码重用的原则,使用时可以不需要从头开始创建新类,可以在现有的基础上添加新的方法和属性,节约时间和精力,大大提高了效率

      继承中合理派生子类可以通过“是不是”的规则进行判断,也就是“is-a”关系,例如:猫是动物,狗是动物这样的一个关系。

      当在类之间创爱你“is-a”关系是,也就在两个或者两个以上的类之间构建了依赖关系,经典的继承基本思想是新类可以利用既有类的功能

    2、继承的使用

      1、创建两个新类Teacher和Student

      2、创建一个新的类Person,提取Teacher和Student类中公共部分

      3、删除Teacher和Student类中提取出的代码,保留各自独有的部分

      4、实现继承,父类为Person,子类为Teacher和Student

    下面是Teacher.cs代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace OOP
    {
        public class Teacher
        {
            public string Name { get; set; }    //姓名
            public int Age { get; set; }    //年龄
            public string Gender { get; set; }  //性别
    
            public Teacher() { }    //构造函数
    
            //接收输入的方法
            public void Accept()
            {
                Console.WriteLine("请输入你的姓名、年龄和性别");
                this.Name = Console.ReadLine();
                this.Age = Convert.ToInt32(Console.ReadLine());
                this.Gender = Console.ReadLine();
                Console.WriteLine("{0}是{1}性,年龄{2},在工作中",this.Name,this.Gender,this.Age);
            }
    
            //老师特有的方法:教书
            public void Teach()
            {
                Console.WriteLine("老师正在教学");
            }
        }
    }

    下面是Student.cs代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace OOP
    {
        public class Student
        {
            public string Name { get; set; }    //姓名
            public int Age { get; set; }    //年龄
            public string Gender { get; set; }  //性别
    
            public Student() { }    //构造函数
    
            //接收输入的方法
            public void Accept()
            {
                Console.WriteLine("请输入你的姓名、年龄和性别");
                this.Name = Console.ReadLine();
                this.Age = Convert.ToInt32(Console.ReadLine());
                this.Gender = Console.ReadLine();
                Console.WriteLine("{0}是{1}性,年龄{2},在工作中",this.Name,this.Gender,this.Age);
            }
    
            //学生特有的方法:学习
            public void Study()
            {
                Console.WriteLine("学生正在学习");
            }
        }
    }

      我们可以看到上面Teacher类和Student类中的代码,两个类都有共同的部分,现在我们就将他们共同的部分提出来,封装成一个类,这个提取出来的类叫做基类或父类,基类的作用是为了以后子类的扩展,而定义的所有公共数据以及成员。扩展类叫做派生类或子类。创建派生类的语法如下

    <访问修饰符> class 派生类名:基类名
    {
           //类的代码块
    }
    

       我们把提取出来的类命名为Person.cs   代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace OOP
    {
        public class Person
        {
            public string Name { get; set; }    //姓名
            public int Age { get; set; }    //年龄
            public string Gender { get; set; }  //性别
    
            //接收输入的方法
            public void Accept()
            {
                Console.WriteLine("请输入你的姓名、年龄和性别");
                this.Name = Console.ReadLine();
                this.Age = Convert.ToInt32(Console.ReadLine());
                this.Gender = Console.ReadLine();
                Console.WriteLine("{0}是{1}性,年龄{2},在工作中",this.Name,this.Gender,this.Age);
            }
        }
    }

      现在我们可以删除Teacher和Student类的公共部分,并通过继承Person实现,代码如下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace OOP
    {
        public class Teacher:Person
        {
            //老师特有的方法:教书
            public void Teach()
            {
                Console.WriteLine("老师正在教学");
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace OOP
    {
        public class Student : Person
        {
            //学生特有的方法:学习
            public void Study()
            {
                Console.WriteLine("学生正在学习");
            }
        }
    }

      实现继承之后,我们看到代码少了很多而且可读性强,效率也高了。注意,虽然构造函数一般定义为公共的,但派生类从来没有继承父类的构造函数。一定要记住,继承保护了封装,它不能访问类的私有成员(包括父类和私有成员)。现在我们编写控制台程序控制一下,代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace OOP
    {
        class Program
        {
            static void Main(string[] args)
            {
                Teacher tea=new Teacher();
                tea.Accept();
                tea.Teach();
    
                Student stu=new Student();
                stu.Accept();
                stu.Study();
    
                Console.ReadKey();
            }
        }
    }

      运行结果如下:

    未完待续。。。

  • 相关阅读:
    mysql查询两个日期之前相隔的天数
    数据库脏读、不可重读读、幻读
    kafka手动开启监听
    oracle更具uuid排序后进行分页
    idea右键没有svn选项
    alibaba dubbo admin的安装
    简单的可以跑起来的dubbo例子
    tomcat配置内存
    redis介绍和安装
    Python深入:Distutils发布Python模块
  • 原文地址:https://www.cnblogs.com/zhangmawang/p/8151552.html
Copyright © 2011-2022 走看看