继承
Contents
继承
- 子类实例化时 会默认调用父类的无参构造方法(从老祖宗开始 依次向下执行)
- 如果父类没有无参构造函数
- 父类始终声明一个无参构造
- 通过base关键字调用指定父类的构造函数
- 如果父类和子类有相同的成员
- 父类装子类:父类
- 子类装子类:子类
- 里氏替换原则:任何父类出现的地方,子类都可以替代(父类容器装子类对象)
- 子类容器不可以装父类对象
class Fater()
{
public Fater(int i){
Console.WriteLine(i);
}
}
class Son() : Fater
{
//调用指定的父类构造
public Son(int i):base(i){
Console.WriteLine(i);
}
//调用自己的构造 复用代码
public Son():this(3){
}
}is 和 as
- 解决父类装子类 不能用父类容器使用子类的方法
- 类对象 is 类名 返回 bool (用于判断)
- 类对象 as 类名 返回转换成这个类名的对象
Fater p = new Program();
if (p is Program) {
(p as Program).Speak();
}密封类和密封方法
- 密封类 是使用sealed关键字修饰的类
- 密封类无法再被继承
- 也可以修饰方法 使其不可以在被重写
sealed class Fater{
}
//报错
class Son:Fater{}作用
- 在面向对象程序设计中 密封类的主要作用就是不允许最底层子类被继承
- 可以保证程序的规范性、安全性