子承父业-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已经创…

GNU gcc的编译工具用法(转)

对大多数不从事Linux平台C语言开发的人来说&#xff0c;GNU gcc的一套工具和Linux平台的共享库的使用还是十分陌生的&#xff0c;其实我也不太熟悉&#xff0c;姑且写点基础知识&#xff0c;权当做备忘吧。 一、GNU gcc的编译工具用法 我们先来写一个简单的C程序&#xff1a;…

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

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

virtual、override-蝌蚪和青蛙-C#多态

文章目录多态的概念多态的实现方法重载、重写、隐藏重载重写隐藏博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 多态的概念 什么是多态&#xff1f; 多态一次最早用于生物学&#xff0c;指同一种族的生物具有不同的特性。比如青蛙小时候是蝌…

jvm--3.内存管理

5.JVM内存管理 JAVA虚拟机在执行java程序的过程中&#xff0c;会把它管理的内存分成若干个不同的数据区域。 ------------------------------------------------------------------------------------— | 运行时数据区 | | ----------- -------- ----------------- | | | 方法…

[BZOJ2458][BeiJing2011]最小三角形

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

Makefile中的变量

Makefile中的变量 2007-11-03 12:03Makefile中变量有以下几个特征&#xff1a; 1. Makefile中变量和函数的展开&#xff08;除规则命令行中的变量和函数以外&#xff09;&#xff0c;是在make读取makefile文件时进行的&#xff0c;这里的变量包括了使用“”定义和使用指示符“d…

小技巧集锦

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程序的测试…

二层交换机、三层交换机和路由器的基本工作原理和三者之间的主要区别

二层交换机:二层交换技术是发展比较成熟&#xff0c;二层交换机属数据链路层设备&#xff0c;可以识别数据包中的MAC地址信息&#xff0c;根据MAC地址进行转发&#xff0c;并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。 具体如下&#xff1a; &#xff08;1&…

Unity3D:视物有点眩晕的原因

设置Main Camera 的 Field of View 为100&#xff0c;看物体总觉得很不舒服。 设置为 60 就正常了。 根本原因&#xff0c;有待于分析 转载于:https://www.cnblogs.com/makebetter/p/7063694.html

使用jQuery清空file文件域的解决方案

使用jQuery清空file文件域的解决方案 var file $("#file") file.after(file.clone().val("")); file.remove();

更改mysql最大连接数

方法一&#xff1a; 打开cmd&#xff0c;用"mysql -u root -p;"命令进入mysql, 输入命令&#xff1a;show variables like "max_connections" 显示最大连接数 更改最大连接数 : set global max_connections 5000 方法二&#xff1a; 在my.ini加上 max_co…

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

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

C#抽象类与密封类-abstract-sealed

文章目录抽象类和抽象方法实现抽象方法接口、类和抽象类密封类博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 如果说继承是面向对象设计理论的基石&#xff0c;那么抽象理论和方法就是继承理论的顶梁柱。 抽象类和抽象方法 简单的说&#x…

vs2010快捷键

Ctrl M O: 折叠所有方法 Ctrl M M: 折叠或者展开当前方法 Ctrl M L: 展开所有方法 1、强迫智能感知&#xff1a;CtrlJ&#xff1b;2、强迫智能感知显示参数信息&#xff1a;Ctrl-Shift-空格&#xff1b;3、格式化整个块&#xff1a;CtrlKF4、检查括号匹配(在左右括号间切…

startup毕业论文

今天起得相对比较晚&#xff0c;为的是一个没有目的面试&#xff0c;去了的结果。只是打击一下自己的自信心&#xff0c;走的时候&#xff0c;面试官冷冷的说了一句&#xff0c;你的面试到此结束&#xff0c;是的&#xff0c;我并没有很伤心&#xff0c;在门外等面试的时候&…

Javascript实现信息滚动效果的方法

<html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>向上无缝滚动</title><style>body { font-size: 12px; line-height: 24px; text-algin: center; /* 页面内容居中 */}* { ma…

C# delegate与event,委托与事件

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