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方法");
            }
        }
posted @ 2020-05-03 14:29  CR7Ronaldo  Views(146)  Comments(0Edit  收藏  举报