• 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在初始化时,调用其他构造函数
    }
  • 相关阅读:
    buildroot编译文件系统,出现mount: you must be root. can't open /dev/console: Permission denied这种错误。
    Ubuntu 18.04实现实时显示网速
    git 第一次push 出现fatal: 无法读取远程仓库。
    Sql2012 AlwaysOn
    SCVMM 安装
    POJ 3537 Crosses and Crosses
    HDOJ 1524 A Chess Game
    HDOJ 1907 John
    HDOJ 1848 Fibonacci again and again
    HDOJ 1536 S-Nim
  • 原文地址:https://www.cnblogs.com/alplf123/p/10188770.html
Copyright © 2020-2023  润新知