csyx3.2-继承

1-继承,多态,引用转换,virtual

2-抽象,隐藏成员,new,sealed,base,初始化顺序


继承的本质:子类在父类已有成员的基础上,对父类进行横向和纵向的扩展

多态

可以用父类类型的变量引用子类类型的实例

is-a

引用转换

向上转换-1个对象的引用可以隐式的转换到其父类的引用

向下转换-向转换到子类的引用则需要显式转换

向上转换

从子类的引用创建父类的引用

向下转换

从父类的引用创建出子类的引用

向下转换需要显式转换,因为可能会失败

as操作符-和强转一样执行向下转换,如果转换失败,不会抛异常,值会变为null

as操作符无法做自定义转换

引用转换√

数值转换×

is操作符-检验引用的转换是否成功,判断对象是否派生于某个类或者实现了某个接口

C#7-模式变量

父类-virtual

方法,属性,事件,索引器

子类-override

virtual方法和override方法的可访问程度,返回类型,方法的签名必须一样

override方法里使用base关键字可以调用父类的实现

base只能向下访问1层,不能base.base

抽象类

抽象类和接口都不能实例化

抽象成员没有实现,子类必须提供实现,除非子类也是象的

子类实现抽象成员-和重写virtual成员一样-使用override

隐藏

子类成员隐藏了父类的成员

A x=new B();

x是对A的引用

故意隐藏父类的成员,加new修饰符抑制编译器报警告

编译时对谁的引用就会绑定到谁

sealed

sealed修饰类成员-针对重写的成员,可以使用sealed关键字把它密封起来,防止它被其子类重写

public sealed override type 方法名 {方法体}

sealed修饰类本身-隐式的sealed所有的virtual函数

base关键字

this-自身

base-向上访问1层

1.调用父类的构造函数

2.从子类访问父类里被重写的函数

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

调用父类的构造函数-使用base关键字

在1个继承链上,创建1个最下层的对象,上层的构造函数都会被执行-先执行父类的构造函数,再执行子类的构造函数

隐式调用无参的父类构造函数

初始化顺序:

子类字段

父类字段

父类构造函数

子类构造函数

重载方法被调用时,更具体的类型拥有更高的优先级

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值