每日一测5(关于继承)

继承、封装和多态是面向对象编程的重要特性。
其成员被继承的类叫基类(或父类),继承其成员的类叫派生类(或子类)。

1、子类隐式获得父类的除构造函数和析构函数以外的所有成员(包括私有和非私有)。

2、继承的单一性:c#不支持多重继承,子类只能有一个直接父类,但一个父类可以同时拥有多个子类。

3、继承的传递性:即 B继承自A,C又继承自B,那么C一般拥有A类所有的成员。

4、子类创建的时候会默认调用父类的无参构造函数,如果父类不存在无参构造函数则报错。 如需要调用指定的父类构造函数,用base关键字(每日一测2里有例子)。

5、当子类和父类有同名方法时, 子类的方法会覆盖父类的方法吗?

    class Person
    {
        public void song()
        {
            Console.WriteLine("我是父类的方法");
        }
    }

    class Chinese:Person
    {
        public void song()  //编译器会提示隐藏, 在void前面用new修饰即可
        {
            Console.WriteLine("我是子类的方法");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Chinese(); //父类变量指向子类对象
            p.song();

            Chinese cp = new Chinese();
            cp.song();
            Console.ReadKey();
        }
    }

运行结果为: 

当父类的song方法用virtual修饰, 子类的song用override修饰的时候,运行结果2个均为我是子类的方法

原文地址:https://www.cnblogs.com/jolins/p/4153681.html