C#面向对象--继承

1、继承

继承:类与类之间可以具有继承关系,一个类只能继承一个父类,但可以被好多类继承

构成继承关系的两个类中:父类或基类;子类。

父类与子类的基本特性:

是一种(IS_A)关系:子类是父类的一种特例。

扩充(Extends)关系:子类拥有父类所没有的功能。

2、类成员的访问特权
  公有         public         访问不受限制
  私有         private       只有类自身成员可以访问
  保护         protected    子类可以访问,其他类无法访问

(1)、public和private
主要用于定义单个类的成员存取权限

(2)、protected
当一个类成员被定义为protected之后,所有外界类不可以访问它,但其子类可以访问。

当创建子类对象后,外界可以访问子类的所有成员和父类公有成员。

继承条件下的类成员访问权限:

所有不必让外人知道的东西都是私有的。
  所有需要向外提供的服务都是公有的。
  所有的“祖传绝招”,“密不外传”的都是保护的。

(3)、internal

只局限于同一个程序集内部
internal是C#的默认可访问性,这就是说,如果某个类没有任何可访问性关键字在它前面
,则它就是internal的。

3、子类父类变量的互相赋值

      *引用类型与值类型的区别

  

总结:

一共三部分:子类继承父类;子类转换成父类类型;父类转换成子类

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

子类继承父类,一个类只能继承一个父类

当子类继承父类之后就拥有了父类的公共属性和方法

子类对象可以直接转换为父类类型,但父类对象不能直接转换为子类类型,当某个父类对象 是通过子类对象转换来的时候,通过父类类型不能点出来子类的属性和方法。

只有当从某个子类对象转换来的父类对象,才能再转换回去

  对象的等号赋值,实际赋值的是指向
  Class1 c = new Class1();
  Class1 d = c; 那么d和c是一个东西。

子类对象可以被当成基类对象使用

如果确信父类变量中所引用的对象的确是子类类型,则可以通过类型强制转换进行赋值:
 
   子类对象变量=(子类名称)基类对象变量;

或使用as运算符

子类对象变量=基类对象变量 as 子类名称

4、方法重载、隐藏与虚方法调用

  扩充:子类方法,父类没有;

  重载:子类有父类的同名函数,但参数类型或数目不一样;

  完全相同:子类方法与父类方法从方法名称到参数类型完全一样。

(1)重载(overlord)

    同名函数,参数类型不同

 父类 子类 

   同名函数,参数类型相同

 

类型转换

总结

当子类继承父类的时候,父类中的与子类同名不同参数的的方法,可与子类方法构成重载关系
父类只能读自己的方法,不能调用子类的。
父类有一个和子类同名参数的方法的时候,通过父类类型对象调的是父类的方法
通过子类类型调用的是子类的方法

(2)、隐藏

(3)、重写与虚方法调用

父类是虚 ,子类是覆盖。

面向对象语言拥有的“虚方法调用”特性,使我们可以值用同样的一个语句,在运行是根据对象类型而执行不同的操作。

时间: 2024-10-05 11:20:14

C#面向对象--继承的相关文章

(一)关于面向对象----继承

(一)关于面向对象----继承 接触面向对象许久了,对于继承这一块也确实琢磨了一段时间,搜集各种资料和网站,也未能得到使自己满意的,并能快速理解的继承知识,于是对他们归类,并得出自己的总结. 先说说继承是什么吧?也许我们最早接触有关继承的应该是"遗产"??也许电视剧看多了,总有家族为了这玩意儿整的你死我活,确实听看不下去的哈,但是对于咱大JS而言,可就变得十分和蔼,可亲.毕竟没有人来争夺,也不会有任何事故,最多来些许bug等等.废话不多说,进入正题!! 1.扩展原型对象继承:往原型对象

Php面向对象 – 继承和重写

继承: php中,通过在类上,使用特殊的操作达到目的. 通过在定义类时,利用extends来指明当前类对象继承那个类的对象. 例子: class C { public  $p_c =  "value c"; } class D extends C { public  $p_d = "value d"; } $o =  new D; var_dump($o->p_c) var_dump($o->p_d) 输出:string(7) "value c

Java面向对象㈡ -- 继承与多态

Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆盖的概念.覆盖被用来支持多态.实际开发中Java通常继承于抽象类,实现于接口.如果不希望一个类被继承,或者一个方法被覆盖,或者一个成员变量被改变,就可以用final修饰.这里只说明两个问题:1,重载和覆盖的区别重载和覆盖的区别:重载发生在同一个类之中,重载要求函数名相同,参数不同(参数个数||参数类

关于 JS 面向对象继承属性和方法的小例子

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>关于 JS 面向对象继承属性和方法的小例子</h1> </body> </html> <script> //人的构造函

黑马程序员-OC面向对象继承关系和组合关系笔记

继承关系是描述类和类之间的关系,两个类分别称为子类和父类,子类继承了父类,子类就拥有了父类的属性和方法: 继承的关系特点描述出来就是:** "是" **  (例如:学生类 是 人类) 组合关系描述的语句是:**** "拥有" ***  (例如:学生有成绩这个属性,而成绩属性本来就是一个成绩类的对象 ) 继承示例代码: #import <Foundation/Foundation.h> //Animal类的声明 @interface Animal : NS

12.面向对象(继承/super/接口/抽象类)

面向对象继承与派生继承继承顺序继承原理子类调用父类的方法(super)组合接口接口的概念:接口的概念解释和使用:python中的接口:抽象类 面向对象 继承与派生 继承 什么是继承?继承是一种创建新的类的方式 class A: pass class B(A): pass 在python中,新建的类可以继承自一个或者多个父类,原始类称为基类或者超类,新建的类称为派生类或者子类 python中类的继承分为,单继承和多继承. 查看继承的方法B.__bases__ 如果没有指定基类,python的类会默

C#编程语言与面向对象——继承

现实生活中的事物都归属于一定的类别,比如,狮子是一种(IS_A)动物,为了在计算机中模拟这种关系,面向对象的语言引入了继承(inherit)特性. 构成继承关系的两个类中,Animal称为父类(parent class)或基类(base class),Lion称为子类(child class). 父类与子类之间拥有以下两个基本特性: 1.是一种(IS_A)关系:子类是父类的一种特例. 2.扩充(Extends)关系:子类拥有父类所没有的功能. class Animal { } class Lio

.Net学习 第2季02 C#面向对象继承1

.Net 视频学习第2季 C#面向对象 面向对象继承1 查找类的命名空间快捷键:alt+shift+F10 项目A中有类X,要在项目B中使用X的话,首先在项目B的引用当中添加项目A,然后在项目B的代码中添加using A;(假设项目A类X的命名空间就是A)或者在使用X时采用A.X的格式. 记录运行时间 Stopwatch sw = new Stopwatch(); sw.Start(); // 代码 sw.Stop(); Console.WriteLine(sw.Elapsed); Start(

js面向对象继承

前言 最近看到js面向对象这章节了,主要学习了原型和面向对象继承关系,为了梳理自己的知识逻辑,特此记录. js的面向对象 先说说我目前了解的js创建对象方法 1.写一个函数,然后通过new创建对象 2.字面量的方式 如果想要复用的话,可能会用到工厂方法 工厂方法每次都要创建对象 并返回 构造方法创建对象方法可以更简洁 然而构造方法用实现实例间共享共同的方法,比较麻烦 原型可以实现实例共享所有属性 每个函数都有指向原型对象的指针,如果将一个函数的原型属性赋值给另外函数的实例,函数的原型将指向另外一

CBV-2-CBV流程-view源码解析-面向对象-继承

CBV-2-CBV流程-view源码解析-面向对象-继承 CBV,基于反射实现根据请求方式不同,执行不同的方法. 请求流程:view源码解析 1.urls.py :请求一定来执行视图下的as_view方法. 2.views.py 视图内没有as_view方法,则找父级的as_view方法. 3.源码:as_view返回自己下面的view方法 4.as_view执行了自己view方法,放回值是dispatch方法. 5.dispatch方法判断请求方式. 6.所以请求已经来,第一步先执行的都是di