C# 继承多态

一、继承
    1.区别于java使用的extends,c#使用“:”
    2.子类继承父类,父类派生子类。父类-基类,子类-派生类。
    3.java使用super代表父类,c#使用base代表父类
    4.当调用子类构造器创建对象的时候会自动调用父类的默认构造器,该种调用属于隐式调用。由此可见,当编写父类有参构造器的时候,必须手动添加无参构造器。
    5.显式调用父类有参构造器:
        父类:
        public Employee(string id,int age,string name,string gender) 
        {
            this.ID = id;
            this.Age = age;
            this.Name = name;
            this.Gender = gender;
        }
        子类:
         class PM:Employee
        {
            public PM(string id, int age, string name, string gender, int yearOfExperience):base(id,age,name,gender)
            {
                //this.ID = id;
                //this.Age = age;
                //this.Name = name;
                //this.Gender = gender;
                this.yearOfExperience = yearOfExperience;
            }
        }
    P.S.
        1.“:”不可缺
        2.参数名必须完全相同,包括父类构造器的参数,子类构造器的参数,以及子类显式调用父类构造器的参数
    
    6.特例:当子类无参构造器调用父类有参构造器的时候,必须给参数赋值。
    7.c#使用"is"关键字来判断两者是否有继承关系,该关键字返回boolean结果(相比下,java使用"instanceOf")
    
    8.继承具有传递性,子类不能同时继承多个父类。用sealed类修饰的类叫做密封类,无法被继承(相比下,java使用final)。
    
二、多态
    1.虚方法:virtual
    2.重写:override
    3.父类定义的虚方法不一定要被子类重写。若不重写父类虚方法,则依然执行父类的默认实现;若重写父类虚方法,则执行子类重写后的方法。
    4里氏替换原则:
        子类可以替换父类并且出现在父类能够出现的任何地方,且程序的行为不会发生变化(但是父类对象不能替换子类对象)
    5.as操作符:进行类型转换不会产生异常,转换失败会返回null。类似于强转,as前强转为as后
    
    6.抽象abstract
        1).抽象类不能密封或者静态的。
        2).快速生成重写抽象方法:shift+alt+F10+enter(光标放在继承的父类上,父类必须是abstract抽象类和抽象方法)
        3).子类必须重写抽象类方法,重写抽象类后的方法样式和重写虚方法的样式一模一样。
    

猜你喜欢

转载自blog.csdn.net/MD_ASCE/article/details/81737345