namespace console_class_继承 { class Program { public static void Main(string[] args) { Dog d = new Dog(); d.run(); new Dog(50); Console.ReadKey(true); } } class Animals{ public Animals(){ //可以不用实现 Console.WriteLine("我是父类默认构造函数"); } public Animals(string name){ Console.WriteLine(name); } public virtual void run(){ Console.WriteLine(string.Format("class:{0} i`m running", this)); //这里是派生于animal 子类dog指针 walk();//这里还是通过向上查找原则,找到父类中的实现; } protected virtual void walk(){ Console.WriteLine("now, i`m walking... father"); } } class Dog: Animals{ public Dog():base("leo"){ //如果没有基类没有默认构造函数,则必须通过base指定对应的构造函数 Console.WriteLine(111); } // public Dog(int weight):this(50, 100){ //通过this 来调用其他构造,先调用,在执行 Console.WriteLine("调用完this在执行"); } public Dog(int weight, int height){ Console.WriteLine("我被其他构造函数通过this来调用了"); } public override void run(){ base.run(); } public void eat(){ Console.WriteLine("跑完就吃..."); } // protected override void walk(){ //我们屏蔽掉这段实现 // // Console.WriteLine("now, i`m walking..."); // } } //1、子类可以通过base关键字调用基类的属性方法; //2、派生类初始化 // -> 初始化子类属性,字段 // -> 初始化父类子类属性,字段 // -> 初始化父类构造器 // -> 初始化派生类构造器 //3、如果派生类没有显试调用基类构造函数,如果基有默认构造则调用默认函数 //4、如果基类有多个构造函数,但没有默认构造函数,则必须通过派生类base关键字来显式调用 //5、类中有多个构造,可以通过this在初始化时,调用其他构造函数 }