子承父业-C#继承

文章目录

  • 继承的定义和使用
    • 实例
  • 继承的特性
    • 继承的可传递性
    • 继承的单一性
    • 继承中的访问修饰符
  • base和this关键字
    • base
    • this
    • 实例

  • 博主写作不容易,孩子需要您鼓励
  • 万水千山总是情 , 先点个赞行不行

继承是软件复用的一种形式。使用继承可以复用现在类的数据和行为,为其赋予新功能而创建出新类。复用能节约开发的时间,能复用经过实践检验和调试的高质量代码,提高系统的质量。

继承的定义和使用

在现有类(基类、父类)上建立新类(派生类、子类)的过程称为继承。派生类能自动获得基类的除构造函数和析构函数函数以外的所有成员,可以在派生类中添加新的属性和方法拓展其功能。

  • 通过继承创建派生类语法格式如下:
  • <访问修饰符> class 派生类名:基类名{//类的代码}
    

    在实际中,一个类的对象也是类外一个类的对象。例如,一个矩形类属于四边形。也可以说矩形是从四边形类继承而来的。四边形类是基类,矩形类是派生类。再如,教师类和学生类都可以从人这个来派生,讲师和教授可以从教师类派生,研究生和本科生可以从学生类派生而得到。

    实例

    定义基类Person,然后通过继承创建派生类Student。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace test
    {class Program{static void Main(string[] args){Person person1 = new Person("小明", 18, "男");person1.DisPlay();Student Stu1 = new Student();Stu1.Name = "小王";Stu1.Age = 19;Stu1.Gender = "男";Stu1.Class = "2014级机械工程专业";Stu1.DisPlay();Stu1.Study();Console.ReadKey();}}public class Person{private String _id;         //身份证号码字段idpublic string ID            //身份证号码属性id{get { return _id; }set { _id = value; }}private String _name;       //姓名字段public string Name          //姓名属性{get { return _name; }set { _name = value; }}private int _age;           //年龄字段public int Age              //年龄属性{get { return _age; }set { _age = value; }}private String _gender;       //性别字段public string Gender          //性别属性{get { return _gender; }set { _gender = value; }}public Person()                 //无参构造函数{ }public Person(string name,int age,string gender)    //有参构造函数{_name = name;_age = age;_gender = gender;}public void DisPlay()           //基类共用方法,显示人的信息{Console.WriteLine("{0}是{1}性,年龄为{2}岁",this._name,this._gender,this._age);}}public class Student  :Person           //创建派生类,派生自person类{//定义派生类自己的属性private String _class;               //学生班级public string Class{get { return _class; }set { _class = value; }}private String _department;               //学生院系public string Department{get { return _department; }set { _department = value; }}private String _no;               //学生学号public string No{get { return _no; }set { _no = value; }}public Student()                // 无参构造函数{                                   }//定义派生类独有方法Study,表示在校学习public void Study(){Console.WriteLine("学生在校学习");}}}
    

    运行结果:
    在这里插入图片描述

    继承的特性

    继承的可传递性

    如果C从B派生,B又从A派生,那么C不仅继承B中声明的成员,同样也继承了A中的成员。
    派生类是基类的拓展,在哦爱生类中可以添加新成员,但是不能去除已经继承的成员。

    继承的单一性

    继承的单一性是指派生类只能从一个基类中继承,不能同时继承多个基类。C#不支持多重继承。多重继承可以通过接口实现。

    继承中的访问修饰符

    在前面的帖子已经讲到,C#中的访问修饰符有:public、protected、private、internal和protected internal5种,可以使用这些访问修饰符指定5个可访问级别。
    在继承时各个访问修饰符的访问权限如下:

    访问性修饰符类内部派生类
    public访问不受限制不受限制
    protected访问仅限于包含类或从包含类派生的类型可以访问
    internal访问仅限于当前项目可以访问
    protected internal访问仅限于从包含类派生的当前项目或类型可以访问
    private访问仅限于包含类不可访问

    基类中的成员如果用public修饰,任何类都可以访问;如果用private修饰,他讲作为私有成员,只有类本身可以访问,其他任何类都无法访问。在C#中,我们是用protected修饰符,使用这个访问修饰符的成员可以被其派生类访问,而不允许其他非派生类访问。

    base和this关键字

    base

    从上面的介绍我们知道,基类中只有被public、protected、internal修饰的成员才能被访问,这些成员包括任何基类的字段、属性、方法和索引器,但是基类的构造函数和析构函数是不能继承的。如果要继承基类的构造函数,必须使用base关键字来实现。在C#中的base关键字代表基类,使用base关键字可以调用基类的构造函数、属性和方法。

  • 使用base关键字调用基类构造函数的语法如下:
  • public Student(string name,int age,string gender): base(name, age, gender){//通过base(name, age, gender)调用基类的构造函数}
    
  • 使用base关键字调用基类方法的语法如下:
  • base:基类方法();
    

    this

    相对于base来说,this关键字是引用类的当前实例。
    如在上段程序中的构造函数中添加this,可以写成一下形式:

    public Person(string name,int age,string gender)    //有参构造函数{this._name = name;this._age = age;this._gender = gender;}
    

    this关键字引用类的当前实例,还可以用做拓展方法的第一个参数的修饰符,this关键字还可以调用自己的构造方法。使用this关键字可以使代码的编写简单化,不容易出错。在类的方法里使用this关键字,在后面输入一个“.”符号后,系统会把本类所能调用的非静态方法和变量都显示出来供选择,这样可以提高编码效率。

    派生类继承基类的属性方法,从而使创建派生类变得简单,可以实现代码的重用。继承还有一个重要的特性,即基类对象可以引用派生类对象,也就是派生类对象可以赋值给基类对象变量。

    实例

    使用base和this改进上面的程序

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace test
    {class Program{static void Main(string[] args){Person person1 = new Person("小明", 18, "男");//利用有参构造函数创建对象person1.DisPlay();                              //调用DisPlay方法显示信息Student Stu1 = new Student("小美",19,"女"); //利用有参构造函数创建对象Stu1.Class = "2014级护理专业";Stu1.DisPlay();                             //调用基类DisPlay方法显示信息Stu1.Study();Person person2 = new Person();              //创建person类对象person2 = Stu1;                             //把派生类对象赋值给基类对象person2.DisPlay();                          //调用DisPlay方法显示信息((Student)person2).Study();                 //基类对象调用派生类的方法Console.ReadKey();}}public class Person{private String _id;         //身份证号码字段idpublic string ID            //身份证号码属性id{get { return this._id; }set { this._id = value; }}private String _name;       //姓名字段public string Name          //姓名属性{get { return this._name; }set { this._name = value; }}private int _age;           //年龄字段public int Age              //年龄属性{get { return this._age; }set { this._age = value; }}private String _gender;       //性别字段public string Gender          //性别属性{get { return this._gender; }set { this._gender = value; }}public Person()                 //无参构造函数{ }public Person(string name,int age,string gender)    //有参构造函数{this._name = name;this._age = age;this._gender = gender;}public void DisPlay()           //基类共用方法,显示人的信息{Console.WriteLine("{0}是{1}性,年龄为{2}岁",this._name,this._gender,this._age);}}public class Student  :Person           //创建派生类,派生自person类{//定义派生类自己的属性private String _class;               //学生班级public string Class{get { return _class; }set { _class = value; }}private String _department;               //学生院系public string Department{get { return _department; }set { _department = value; }}private String _no;               //学生学号public string No{get { return _no; }set { _no = value; }}public Student()                // 无参构造函数{                                   }public Student(string name,int age,string gender):base(name,age,gender){                               // 调用基类的构造函数}//定义派生类独有方法Study,表示在校学习public void Study(){Console.WriteLine("学生在校学习");}}}
    

    运行结果:
    在这里插入图片描述

    ------------------------------------------------------------------------------------------分割线
    ------------------------------------------------------------------------------------------
    
    • 博主简介:
    • 工业自动化上位机软件工程师、机器视觉算法工程师、运动控制算法工程师。目前从业于智能制造自动化行业。 博主邮箱:2296776525@qq.com
    • 帮忙点个赞吧。哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAVEN创建并打包web项目

maven项目是由一个maven project和多个maven module组成的&#xff0c;以下简介一下maven webapp的创建和打包&#xff0c;前提是你已经安装配置好maven了。打开eclipse。依照例如以下操作&#xff1a; 我们首先当然要先创建一个project。如上图选择。 如今maven project已经创…

学界 | CVPR 2018颁布五大奖项,何恺明获年轻学者奖

年度计算机视觉和模式识别盛会CVPR&#xff08;Conference on Computer Vision and Pattern Recognition&#xff09;在美国盐湖城开幕啦&#xff01; 据统计&#xff0c;本届大会有超过3309篇大会论文投稿&#xff0c;接收979篇论文。 面对如此多的论文评审任务&#xff0c;CV…

[BZOJ2458][BeiJing2011]最小三角形

题目描述 Description Xaviera现在遇到了一个有趣的问题。平面上有N个点&#xff0c;Xaviera想找出周长最小的三角形。由于点非常多&#xff0c;分布也非常乱&#xff0c;所以Xaviera想请你来解决这个问题。为了减小问题的难度&#xff0c;这里的三角形也包括共线的三点。 输…

小技巧集锦

2019独角兽企业重金招聘Python工程师标准>>> jackson JsonDeserialize 使用方法&#xff1a; 实现方法注解写在set方法上。 public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {private SimpleDateFormat datetimeFormat new SimpleD…

interface-C#接口-统一的标准

文章目录接口的定义接口的实现实例1实例2接口的继承博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 接口是面向对象编程的一个重要技术&#xff0c;在C#中负责实现多重继承。一个接口定义一个协定&#xff0c;实现接口类或结构体必须遵守其协定…

JMeter入门(1):JMeter总体介绍及组件介绍

一、JMeter概述 JMeter就是一个测试工具&#xff0c;相比于LoadRunner等测试工具&#xff0c;此工具免费&#xff0c;且比较好用&#xff0c;但是前提当然是安装Java环境&#xff1b;JMeter可以做(1)压力测试及性能测试&#xff1b;(2)数据库测试&#xff1b;(3)Java程序的测试…

根据HTML5 获取当前位置的经纬度【百度地图】【高德地图】

是想让地图的定位用户位置更准确一些。 查看了介绍&#xff1a; http://www.w3school.com.cn/html5/html_5_geolocation.asp 看介绍中拿数据挺简单。 <!DOCTYPE html> <html> <body> <p id"demo">点击这个按钮&#xff0c;获得您的坐标&…

C# delegate与event,委托与事件

文章目录委托示例事件实例博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 委托和事件是C#中两个比较复杂的概念&#xff0c;这篇文章介绍两个概念与基本用法&#xff0c;让大家理解C#中的事件处理机制。 委托 委托也叫代理&#xff0c;就是把…

Java的四种引用,强弱软虚,用到的场景(转+补充)

Q1&#xff1a;引用队列是什么&#xff1f;如何使用&#xff1f;使用的场景有哪些&#xff1f; A1:oracle的api文档的描述&#xff1a; https://docs.oracle.com/javase/7/docs/api/java/lang/ref/ReferenceQueue.htmlReference queues, to which registered reference objects…

C# lambda表达式与匿名方法

文章目录匿名方法Lambda表达式实例实例博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 C#中的匿名方法是在C#2.0引入的&#xff0c;它终结了声明委托的唯一方法是使用命名方法的时代。在C#更高版本中&#xff0c;Lambda表达式取代了匿名方法&a…

常用的相似度计算

在数据分析和数据挖掘的过程中&#xff0c;我们经常需要知道个体间差异的大小&#xff0c;进而评价个体的相似性和类别。最常见的是数据分析中的相关分析&#xff0c;数据挖掘中的分 类和聚类算法&#xff0c;如K最近邻&#xff08;KNN&#xff09;和K均值&#xff08;K-Means&…

玩转C#窗体-属性、方法和事件详细说明

文章目录简介Windows窗体的基本属性一、布局属性1、StartPosition属性2、Location属性3、尺寸属性4、WindowsState属性5、Autoscroll属性6、AutoSize属性二、样式属性1、ControlBox属性2、MaximizeBox属性3、MinimizeBox属性4、HelpButton属性5、ShowIcon属性6、Icon属性7、Sho…

for循环和数组练习

//公鸡2文&#xff0c;母鸡1文&#xff0c;小鸡半文&#xff0c;每种至少一只&#xff0c;100文买100只鸡有多少种可能var ci 0; for(var g1;g<50;g){for(var m1;m<100;m){for(var x1;x<100;x){if(g*2m*1x*(0.5)100&&gmx100){ci1;console.log("买公鸡&qu…

c# automapper 使用

一、最简单的用法 有两个类User和UserDto 1 public class User2 {3 public int Id { get; set; }4 public string Name { get; set; }5 public int Age { get; set; }6 }7 8 public class UserDto9 { 10 public string Na…

API设计原则 - Qt官网的设计实践总结

原文链接&#xff1a;API Design Principles - Qt Wiki 基于Gary的影响力上 Gary Gao 的译文稿&#xff1a;C的API设计指导 译文发在酷壳 - CoolShell&#xff1a;API设计原则&#xff0c; 2017-07-25 API设计原则 - Qt官网的设计实践总结 &#x1f34e; 译序 Qt的设计水准在业…

QtCreator5.12.6安装图文教程

前言接触过Qt的同学肯定用过QtCreator,本id最近常用&#xff0c;也就写个教程记录一下安装的过程。可能比较少人学过Qt&#xff0c;感觉Qt还是挺不错的&#xff0c;做出来的界面还算好看&#xff0c;关键是跨平台。说明&#xff1a;安装的系统&#xff1a;win10专业版QtCreator…

H.264学习(一)——帧和场的概念

一、何谓场&#xff1f; 每个电视帧都是通过扫描屏幕两次而产生的&#xff0c;第二个扫描的线条刚好填满第一次扫描所留下的缝隙。每个扫描即称为一个场。因此 25 帧/秒的电视画面实际上为 50 场/秒 (若为 NTSC 则分别为 30 & 60 - 因为我是中国人&#xff0c;因此我采用 P…

RabbitMQ for windows

一、搭建环境 Rabbit MQ 是建立在强大的Erlang OTP平台上&#xff0c;因此安装RabbitMQ之前要先安装Erlang。 erlang&#xff1a;http://www.erlang.org/download.html rabbitmq&#xff1a;http://www.rabbitmq.com/download.html 我目前使用的&#xff1a;http://pan.baidu.c…

圆环内外圆毛刺(凸起)缺口(凹陷)检测halcon

文章目录处理要求处理方法1方法一思路方法一halcon源码处理效果处理方法2方法二思路方法二halcon源码处理效果博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 处理要求 椭圆/圆环&#xff08;产品易变形&#xff0c;为椭圆&#xff09;内外圆…

什么是单播、多播和广播br

什么是单播、多播和广播   “单播”&#xff08;Unicast&#xff09;、“多播”&#xff08;Multicast&#xff09;和“广播”&#xff08;Broadcast&#xff09;这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思&#xff1f;区别何在&#…