C#入门详解

继承

类的继承

  • 类在功能上的扩展
  • 只能有一个基类,但可以实现多个基接口
  • 类访问级别对继承的影响
  • sealed类不能被继承
    成员的继承与访问
  • 派生类对继承成员的访问
  • 派生类对基类成员的访问
  • 构造器的不可继承性
    面向对象的实现风格
  • Class-based
  • Prototype-based

一个派生类实例从语义上讲也是一个基类的实例(is-a)
结果为false(子类-父类)
C#入门详解_第1张图片

父类类型变量引用子类类型的实例
C#入门详解_第2张图片
只支持继承一个基类,可实现多个接口类
C#入门详解_第3张图片
子类的访问级别不能超过父类。但父类的可以超过子类
C#入门详解_第4张图片
派生类基于基类已有的成员,对基类成员全部继承。
类成员在数量上的扩充——横向扩展
对类成员的版本进行更新——纵向扩展(重写)
在子类完整接受父类成员的前提下,对父类进行的横向和纵向的扩展。(不包括实例构造器)

F12 转到定义 再跳回去ctrl-

C#入门详解_第5张图片
结果是car owner
先从基类构造器执行
C#入门详解_第6张图片
base只能向上访问一层,所以在car派生类中只能访问到上一级父类vehicle
C#入门详解_第7张图片
父类构造器有参数时,派生类此时会报错(调用带参数的构造器)
C#入门详解_第8张图片
给派生类构造器传一个值,满足父类构造器的签名
C#入门详解_第9张图片
将派生类的构造器也写成带参数的

父类的实例构造器不能被子类继承

类成员的访问级别,以类的访问级别为上限。
C#入门详解_第10张图片
internal 级别只可以在同一个名称空间内访问,在其他的程序集不可以
C#入门详解_第11张图片
在同一个程序集内可以访问

private 把成员的访问级别限制在类的类体里,此时同一个程序集也不可以访问
C#入门详解_第12张图片
虽继承下来但不可以访问

C#入门详解_第13张图片
C#入门详解_第14张图片
值是20
Car继承了Vehicle,并且访问级别是public,所以在HelloAccess名称空间时可以访问到(字段rpm虽是private,但是通过属性间接可以访问)

如果想让子类访问,可以改成protected 可被子类访问可跨程序集(intetnal也可-整个程序集都可访问)
protected更多的应用在方法上
protected和internal组合使用(既可以被派生类所访问,又可被程序集中的所有的其他的类所访问)
C#入门详解_第15张图片

你可能感兴趣的:(C#基础笔记,c#)