c# 继承特点(1)

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在初始化时,调用其他构造函数
}
原文地址:https://www.cnblogs.com/alplf123/p/10188770.html