1、继承的两个特性:传递性、单根性
2、多态
同一操作作用于不同类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。
3、调用父类的成员的关键字:base
4、父类中的成员如果采用private修饰符,它将作为私有成员,其他任何类都无法访问。
5、如果将父类中的成员设置为公有(public)成员,则任何类都可以访问该成员,这不符合我们的要求。
6、C#中提供了另一种访问修饰符protected,被这个访问修饰符修饰的成员允许被其子类访问,而不允许其他非子类访问。
6、
子类继承父类,在编写子类的构造函数时注意一下两点:
1、隐式调用父类的构造函数:
如果子类的构造函数没有使用base关键字指明调用父类的哪个构造函数,则父类必须提供一个默认的无参构造函数。因为子类构造函数在这种情况下会隐式调用父类的默认无 参构造函数base()
2、显示调用父类的构造函数:
如果父类中没有提供默认的无参构造函数,那么子类的构造函数必须明确指明调用的是哪个父类的有参构造函数
7、如果子类的成员和父类的成员同名了使用new关键字。
8、C#中还有一个特殊的关键字sealed,用它修饰的类是不能被继承的。我们称这种类为密封类
9、使用继承的价值
Ø继承模拟了现实世界的关系,这符合我们面向对象编程的思考方向。
Ø继承实现了代码的重用,合理的使用继承,会使我们的代码更加简洁。
Ø继承使得程序结构清晰,子类和父类的层次结构清晰,最终的目的是使子类只关注子类的相关行为和状态。
10、
多态使得子类的实例可以直接赋予基类的变量,然后就可以通过这个变量调用基类的方法
多态的分类:
重载——(口头语)在一个类中实现同名不同参的方法,称为重载。
重写——(口头语)在子类中对父类方法的不同实现,称为重写。
在父类中定义虚方法的语法: 访问修饰符 virtrul 返回类型 方法名称(参数列表) { //方法初始实现 }
注意:虚方法实现后,如果子类没有重写,调用的是基类的默认实现
在子类中重写父类虚方法: 访问修饰符 override 返回类型 方法名称(参数列表) { //方法初始实现 } 子类重写基类的虚方法,也就是将virtual换为override,添加自己的实现,访问修饰符、类型、方法签名和参数列表都不变。
11、virtual的规则
Ø基类的虚成员被重写时,需要使用相同的访问修饰符。
Ø在类的成员前加上virtual关键字后,不能再有abstract、statiic或者override关键字。
Ø如果子类使用new隐藏了基类的成员,就不能再该成员声明中使用override关键字。
Ønew、static和virtual关键字不能与override一起使用