C#基础-面向对象-继承
继承
新建一个基类
对Person类3个字段进行重构->封装字段


效果如下:
public string Name { get => name; set => name = value; }
public string Sex { get => sex; set => sex = value; }
public int Age { get => age; set => age = value; }
完整Person类代码
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp6
{
// 作为被继承的,称为基类,也称为父类
public class Person
{
private string name;
private string sex;
private int age;
public Person()
{
}
public Person(string _name, string _sex, int _age)
{
this.name = _name;
this.sex = _sex;
this.age = _age;
}
public string Name { get => name; set => name = value; }
public string Sex { get => sex; set => sex = value; }
public int Age {
get { return age; }
set {
if (value <= 0)
{
age = 12;
}
else
{
age = value;
}
}
}
}
}
新建一个Doctor类,继承Person
继承的称为子类,或派生类,从person中继承了非private的属性
// 称为派生类,也称为子类,继承Person
public class Doctor:Person
{
}
主函数调用Doctor属性
class Program
{
static void Main(string[] args)
{
Doctor d = new Doctor();
d.Name = "James";
d.Sex = "Male";
d.Age = 23;
Console.WriteLine("医生姓名:{0},性别:{1},年龄:{2}。", d.Name, d.Sex, d.Age);
}
}
子类的构造函数继承父类,并在父类基础上有所增加
// 称为派生类,也称为子类,继承Person
public class Doctor:Person
{
private string departName;
//base 表示调用父类
public Doctor(string _name,string _sex,int _age,string _departName) : base(_name, _sex, _age) // 调用父类的构造函数
{
this.DepartName = _departName;
}
public string DepartName { get => departName; set => departName = value; }
}
主函数实现效果:
static void Main(string[] args)
{
Doctor d = new Doctor("jake","male",24,"外科");
Console.WriteLine("医生姓名:{0},性别:{1},年龄:{2},科室:{3}。", d.Name, d.Sex, d.Age, d.DepartName);
}
new与override
子类覆盖父类的方法,使用new关键字
public class Person
{
public void ShowInfo()
{
Console.WriteLine("Person类的ShowInfo方法");
}
}
子类覆盖父类的方法,使用new关键字
// 称为派生类,也称为子类,继承Person
public class Doctor:Person
{
// 子类覆盖父类的方法,使用new关键字
public new void ShowInfo()
{
Console.WriteLine("Doctor类的ShowInfo方法");
}
}
override 是针对父类中已经定义好的虚方法(virtual),可以重写
public class Person
{
public virtual void ShowInfo()
{
Console.WriteLine("Person类的虚方法");
}
}
override 是针对父类中已经定义好的虚方法(virtual),可以重写
// 称为派生类,也称为子类,继承Person
public class Doctor:Person
{
// override 是针对父类中已经定义好的虚方法(virtual),可以重写
public override void ShowInfo()
{
base.ShowInfo();
}
}
C#基础-面向对象-继承的更多相关文章
- 07JAVA基础面向对象-继承/多态
一.继承 1.概念 子类的共性 重用现有类并在此基础上进行扩展 public class 子类 extends 父类{} 2.继承中的成员访问 成员变量 成员方法 局部->本类中成员变量-> ...
- 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点
前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...
- Java基础-面向对象第二特征之继承(Inheritance)
Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...
- C#基础-----面向对象
C#基础-----面向对象(一) 分类: C#基础2015-06-08 14:10 2人阅读 评论(0) 收藏 举报 1,面向对象 什么是面向对象?一个分析问题的方式(增强了程序的可扩展性) 几个名词 ...
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- python基础——面向对象进阶下
python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...
- python基础——面向对象进阶
python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...
- python基础——面向对象的程序设计
python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
- 第二十五节:Java语言基础-面向对象基础
面向对象 面向过程的代表主要是C语言,面向对象是相对面向过程而言,Java是面向对象的编程语言,面向过程是通过函数体现,面向过程主要是功能行为. 而对于面向对象而言,将功能封装到对象,所以面向对象是基 ...
随机推荐
- Linux kernel rbtree
Linux kernel rbtree 因编写内核模块时需要用到rbtree来记录异步request,研究分析了一下kernel rbtree的使用方法,记录于此.本文主要参考了内核文档rbtree. ...
- C#获取文件格式图标关联应用程序图标
class SystemIcon { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct SHFIL ...
- AngularJS 学习(-)Hello world
早期的AngularJS使我们的前端开发模式发生很大的变化,基使用MVC. Model - html 模板:Controller - js脚本; Model 来自于Web API 或其他Service ...
- Java中的阻塞队列-SynchronousQueue
SynchronousQueue是一个不存储元素的阻塞队列.每一个put操作必须等待一个take操作,否则不能继续添加元素.SynchronousQueue可以看成是一个传球手,负责把生产者线程处理的 ...
- Win10 手工安装.netframework3.5
1.装载win10/win8...等镜像文件 2.cmd命令管理员身份运行 3.输入命令:C:\Windows\system32>dism.exe /online /enable-feature ...
- php socket简单使用
php的socket编程算是比较难以理解的东西吧,不过,我们只要理解socket几个函数之间的关系,以及它们所扮演的角色,那么理解起来应该不是很难了,在笔者看来,socket编程,其实就是建立一个网络 ...
- 云集微助手安装教程和授权说明old
安装教程 一 .手机越狱(如果已经越狱请跳过此步,直接进行第二步) 越狱教程:http://jailbreak.25pp.com/yueyu/ 二 .安装触动精灵(如果你已安装触动精灵最新版请跳过此步 ...
- GDB多线程调试分析
0x00: 在Linux系统上Gdb提供了一组多线程调试命令,如表所示: 多线程调试的主要任务是准确及时地捕捉被调试程序线程状态的变化的事件,并且GDB针对根据捕捉到的事件做出相应的操作,其实最终的结 ...
- JavaScript基础:比较运算符——==与 ===;!=与!==
var x=10, y="10", m=15 x==y;//返回true x===y;//返回false x!=y;//返回false x!==y;//返回true//同理cons ...
- MySQL报错:Packets larger than max_allowed_packet are not all
MySQL根据配置文件会限制Server接受的数据包大小.有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败. 修改方法: 1.修改配置文件my.ini m ...