• C#基础继承(5)


    继承:发生在基类和派生类中,也就是父类和子类。 子类继承父类,通过继承可以访问到父类的成员方法,也可以通过重写访问到父类的抽象或者虚方法。。。

    但是需要注意的一点是在执行过程中,先执行基类中的方法或者是构造函数,再执行子类中的成员方法。如果子类中定义的成员方法和父类中的成员方法一样,并且需要覆盖掉父类的成员方法则需要通过关键字 new 来处理。实现代码如下:

    static void Main(string[] args)
            {
                //很重要的一点:继承时先执行基类构造函数,后执行派生类构造函数,最后再执行方法
                Man man = new Man();
                man.Eat();
            }
            public class People
            {
                public People()
                {
                    Console.WriteLine("父类的构造函数");
                }
                public void Eat()
                {
                    Console.WriteLine("父类吃饭");
                }
            }
            public class Man : People
            {
                public Man()
                {
                    Console.WriteLine("子类构造函数");
                }
                //通过new关键字来隐藏基类中的成员方法
                public new void Eat()
                {
                    Console.WriteLine("我是子类");
                }
            }

    抽象类、abstract抽象方法、virtual虚方法。如果一个类中的成员方法通过abstract关键字定义了抽象方法,则对应的类必须abstract实现抽象类。。。

    抽象类不能实例化。抽象方法没有具体执行代码,必须在非抽象的派生类中重写(通过override关键字),这一点和接口有相同的地方

    还有一种类需要注意,那就是密封类。如果我们对类不作任何约束,也就是说所有类都可以被继承,这种继承的滥用会导致类的层次结构十分庞大,类与类之间的关系会变得很乱导致无法理解。因此C#提供了密封类,我们只需在父类前加上sealed修饰符,那这个类将不能被继承了。密封方法也是在方法前加上sealed修饰

    代码如下:

    public abstract class People
            {
                public People()
                {
                    Console.WriteLine("父类的构造函数");
                }
                //抽象方法:类中方法定义为抽象方法,对应的类必须也声明为抽象类
                public abstract void Eat();
                //有时候不想把类定义为虚方法,但是又想该方法在子类中进行重写,那么则可以通过virtual关键字定义虚方法,子类重写来实现
                public virtual void Say()
                {
                    Console.WriteLine("我是父类的虚方法");
                }
            }
            public class Man : People
            {
                public Man()
                {
                    Console.WriteLine("子类的构造函数");
                }
                //子类重写父类的抽象方法
                public override void Eat()
                {
                    Console.WriteLine("我是子类");
                }
                //重写父类的Say()方法
                public override void Say()
                {
                    
                    Console.WriteLine("我是子类的Say方法");
                }
            }
  • 相关阅读:
    nor flash之4字节地址模式
    DroidVim:在安卓手机上使用vim
    从linux命令行分享文件:bashupload.com和transfer.sh
    记一个实时Linux的中断线程化问题
    nor flash之写保护开销
    第七届开源操作系统会议(OS2ATC 2019)见闻及资料分享
    nor flash之擦除和写入
    PyCharm 远程调试代码
    【图像分析】形态学
    【强化学习】DQN 算法改进
  • 原文地址:https://www.cnblogs.com/hcyesdo/p/12821869.html
Copyright © 2020-2023  润新知