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{}

作用

  • 在面向对象程序设计中 密封类的主要作用就是不允许最底层子类被继承
  • 可以保证程序的规范性、安全性