继承:类与类之间的关系(父子关系)

子类继承父类,那么子类就拥有父类的公共属性和方法
一个子类只能继承一个父类,一个父类可以有好多子类
子类对象可以直接转成父类,但父类只能转回对应的子类
如果子类转成父类之后,父类对象就不能点出子类里面的属性和方法使用了

c#允许一个类继承其他类的属性和方法,别继承的类称为父类,继承的类称为派生类或子类。子类不仅仅可以继承基类的属性和方法,还可以根据需要定义新的属性和方法,增加新的功能,这样可是用户重用基类的代码,专注于子类的新代码,提高类的可重用性,继承的好处是能共享代码,继承后,父类的所有的字段和方法都将存在于子类中,每一个子类都具有父类的非私有特性。

Object类是所有类的祖先(默认的)

c#语言中子类仅能派生于一个父类。

1.继承的定义

如果要声明一个类派生于另一个类,可以使用下面的语法

[修饰符]  class  派生类名:基类名

{

//派生类的成员

}

其中:

修饰符:可选用poublic    internal      absrtract     sealed   new     private    protected等修饰符,根据需要确定。

派生类名:必须是一个有效的c#标识符。一般采用Pascal大小写命名规则,单词的第一个字母大写。

基类名:被继承的类的名。

类体:用于定义派生类的成员。

继承意味着一个类隐藏了除了构造函数和析构函数的基类的所有成员。

继承应该注意的几点

《1》继承是可以传递的。

《2》派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去基类的成员的定义。

《3》析构函数和构造函数不能参与被继承,除此之外的其他任何成员都能被继承。

《4》派生类如果定义了与继承而来的成员同名的新成员,都将覆盖以继承的成员。但这并不是在派生类中删除了这些成员,而只是不能再访问这些成员。

《5》类可以定义虚方法、虚属性以及虚索引指示器,他的派生类都能够重载这些成员。从而实现类的多态性。

《6》派生类的成员有两个成员:一个是从基类中继承来的,另一个是在派生类中重新定义的。

案例如下

  1. using system;
  2. namespace Example1
  3.  
  4. {
  5. //定义基类
  6. public class Person
  7. {
  8. protected string name ; //姓名 保护成员
  9. protected string indentityCard; //身份证号
  10. Private string tel; //电话号码 私有成员
  11. public Person (string P_name ,string P_identityCard,string P_tel) //构造函数
  12. {
  13. name = P_name ;
  14. indentityCard= P_identityCard;
  15. tel=P_tel;
  16. }
  17. public void PrintInfo()
  18. {
  19. Console.WriteLine("姓名:{0}",name);
  20. Console.WriteLine("身份证号:{0}",identityCard);
  21. }
  22.  
  23. }
  24.  
  25. //定义派生类
  26.  
  27. public class Employee:Person
  28. {
  29. public string id; //在派生类中添加雇员的编号 公共成员
  30. public Employee(string P_name,string P_identityCard,string P_tel,string e_id):base( P_name , P_identityCard, P_tel) //构造函数
  31. {
  32. id=e_id;
  33. }
  34. public void PrintEmployeeInfo() //雇员信息打印
  35. {
  36. Console.WriteLine("姓名:{0}",name);
  37. Console.WriteLine("身份证号:{0}",identityCard);
  38. Console.WriteLine("雇员 :{0}",id);
  39. }
  40. }
  41.  
  42. class Class1
  43.  
  44. {
  45. [STAThread]
  46. static void Main(string[] args)
  47. {
  48. //用类派生创建对象
  49. Employee liming=new Employee("liming","","" ,"");
  50. //调用PrintEmployeeInfo() 方法
  51. Console.WriteLine("调用PrintEmployeeInfo()方法");
  52. liming.PrintEmployeeInfo(); //调用PrintInfo()方法,继承而来
  53. Console.WriteLine("调用PrintInfo()方法");
  54. liming.PrintInfo();
  55. }
  56. }
  57. }

程序运行结果:

            调用PrintEmployeeInfo()方法

             姓名:linming

             身份证号:  370321012950020

            调用PrintInfo()方法 

            姓名:liming

            身份证号: 370321012950020

解析程序:

     《1》这里面要注意一点,基类中的tel定义的是私有成员,在我们继承的时候是可以继承的,但是我们这里是不能访问的。

《2》当我们实例化子类的时候我们就调用基类,所以初始化的同时也对基类进行了初始化。

派生类的构造函数

定义派生类的构造函数

[修饰符]   派生类类名(参数列表1):base(参数2)

{

       //派生类初始化代码

}

修饰符:可以是public  pirvate  static

派生类名:构造函数所在的类名

参数列表1:指明参数的名称和类型,包含派生类新增参数及基类中的参数,也可以无参数。

base:基类关键字表示基类,关键字base为调用基类成员提供了一个简便的方法,调用基类成员的格式为base.成员名。

    当我们实例化时就不需要带上base这个关键字了。

使用new修饰符隐藏基类的成员

使用new修饰符可以显示隐藏从基类继承的成员,这样在使用派生类的对象的方法时,调用的是派生类重写的与派生类的新方法。

例题

  1. public class MyBase
  2. {
  3. public int x;
  4. public void MyVoke()
  5. {
  6. Console.WriteLine("this is MyBase");
  7. }
  8. }

在派生中使用MyVoke名称声明成员会隐藏基类中的MyVoke方法,即:

public  class  MyDerived:MyBase

{

                new   public   void   MyVoke()

                 {

                             Console.WriteLine("this    is    MyDerived");

                     }

}

这样我们就隐藏基类的方法了,但我们调用基类的方法的时候就采用:base.基类隐藏的方法;

密封类和密封方法

但我们需要把一个单独的类分开,来实现莫中特定的功能的时候,而不希望他有所继承和重写,我们就需要将这个类密封起来,

命令格式如下:

  sealed   class   FinalClass

{

                        //代码

}

抽象类和抽象函数

c#允许把类和函数声明为abstract,抽象类不能实例化,而抽象类函数没有执行代码,函数括号后跟一个分号,必须在非抽象类中重写,如果类包含抽象函数,该类也是抽象类的,必须声明为抽象的:

abstract   class   Building

{

    public  abstract  decimal  CalcudateHeatingCost(); //抽象的方法

}

c# 面相对象3-之继承性的更多相关文章

  1. js编程-面相对象

    //js面相对象编程 //定义constructor构造方法 function myFn(name,sex){ this.name = name; this.sex = sex; } //用proto ...

  2. 文成小盆友python-num7 -常用模块补充 ,python 牛逼的面相对象

    本篇内容: 常用模块的补充 python面相对象 一.常用模块补充 1.configparser模块 configparser 用于处理特定格式的文件,起内部是调用open()来实现的,他的使用场景是 ...

  3. Java开发知识之Java面相对象

    Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...

  4. python 的面相对象编程--对应c++

    在python的面相对象编程中,我们常常在class中可以看到a(),  _b() ,  __c(), __d()__这样的函数. 由于我是看廖雪峰老师的教程,廖老师为了简单起见,没有引入太多概念,我 ...

  5. 201871010101-陈来弟《面相对象程序设计(java)》第十周学习总结

    201871010101-陈来弟<面相对象程序设计(java)>第十周学习总结 实验八异常.断言与日志 实验时间 2019-11-1 1.实验目的与要求 (1) 掌握java异常处理技术: ...

  6. 初识python:tkinter 实现 弹球小游戏(非面相对象)

    通过 tkinter 采用非面相对象式实现弹球小游戏(使用蹩脚式面相对象实现). #!/user/bin env python # author:Simple-Sir # time:2020/8/3 ...

  7. python面相对象进阶

    1. 类的成员 python 类的成员有三种:字段.方法.属性 字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段 属于对象,只有对象创建 ...

  8. PHP中面相对象对象的知识点整理

    面向对象 万物皆对象,将构成问题的事务分解到各个对象上,建立对象的目的不是为了完成一个工作,而是为了描述某个事务在解决问题中的行为,更符合人的思维习惯,代码重用性高,可扩展性. ___________ ...

  9. JS面相对象

    一.理解对象: //第一种:基于Object对象 var person = new Object(); person.name = 'My Name'; person.age = ; person.g ...

随机推荐

  1. <modules runAllManagedModulesForAllRequests="true" />(转1)

    最近在使用 MVC 开发的时候,遇到一个对我来说“奇怪的问题”,就是使用 BundleTable 进行 CSS.JS 文件绑定,然后使用 Styles.Render.Scripts.Render 进行 ...

  2. Pull生成&解析

    开篇注意,由于解析有可能有大文件非常耗时,建议另开一个线程解析也可以不开具体视情况而定     Pull生成 1.通过xml获得序列化的实例 XmlSerializer nxs = Xml.newSe ...

  3. 如何更改 Mac OS X 系统默认用户名

    说到 Mac 用户名估计有许多人都不知道在哪个地方修改,其实说简单也简单说麻烦也麻烦看你自己的需求.好比如果你只要用户名的登录更改,那是就非常简单的事了.下面这里就给大家介绍mac osx系统如何更改 ...

  4. 改变navigationbar的底部线条颜色

    [[UINavigationBar appearance] setBackgroundImage:[UIImage new]forBarMetrics:UIBarMetricsDefault]; CG ...

  5. hdu2037 经典贪心入门

    今年暑假不AC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  6. eclipse中默认的提示键

    Alt+/:代码提示 Ctrl+/:注释/取消注释 Ctrl+D:删除光标所在行 Ctrl+K:将光标停留在变量上,按Ctrl+K键可以查找到下一个同样的变量 Shift+Ctrl+K:和Ctrl+K ...

  7. spring中连接池的配置

    在默认通过myeclipse生成的配置里,spring使用的是apache的dbcp连接池 <bean id="dataSource" class="org.apa ...

  8. PHP读取EXCEL时写入数据乱码解决办法

    第一步排除excel读取的数据是不是乱码 EXCEL读取时经常会出现乱码,而我们常用的字符集是UTF-8 ,GB2312(GBK) ,这就需要对编码进行转换,但是又不能对纯数字和英文字符转换,否则会乱 ...

  9. mysql 针对单张表的备份与还原

    A.MySQL 备份工具xtrabackup 的安装 . percona 官方xtrabackup 的二进制版本:二进制版本解压就能用了. . 解压xtrabackup & 创建连接 -Lin ...

  10. NOI十连测 第四测 T3

    思路: 算法一:可以n^2找出每个点的权值,然后n^2做完,预计得分10 算法二:随机找点然后每次找最高..貌似只有10分?然而考试的时候煞笔了,边界设成inf.. 算法三:随机找几个点,然后随机爬山 ...