在 父类 a = new 子类(),容易搞混。

这里动手写一下做个实验

先定义父类和子类

class Person
    {

        public string name;

        public string writeName()
        {
            name = "张三";
            return "这是Person类的writeName:" + name;
        }
    }
class Student : Person
    {

        public int age;


        public string writeAge()
        {
            age = 12;
            return "这是Student类的writeAge:" + age;
        }

    }

直接输出

class Program
    {
        static void Main(string[] args)
        {
            Person stu = new Student();
            Console.WriteLine(stu.GetType().Name);
            Console.WriteLine(stu.writeName());
        }
    }

在调用的时候会发现,stu的类型虽然是Student子类,但是stu.只能得到继承自父类的属性name和方法writeName,子类自己的属性和方法无法访问,这说明声明的是什么类型,得到的就是什么类型。

结果如下:

父类调用子类方法 ios 父类调用子类属性_子类

 

 

这种情况如果想调用子类的writeName,需要将父类的writeName声明为抽象方法或者虚方法,在子类中重写。

class Person
    {
        public string name;

        public virtual string writeName()
        {
            name = "张三";
            return "这是Person类的writeName:" + name;
        }
    }

    class Student : Person
    {

        public int age;

        public override string writeName()
        {
            name = "李四";
            return "这是Student类的writeName:" + name;
        }

        public string writeAge()
        {
            age = 12;
            return "这是Student类的writeAge:" + age;
        }

    }

运行结果如下

父类调用子类方法 ios 父类调用子类属性_父类调用子类方法 ios_02

 

 

总结一下:

父类 a = new 子类()时,a是类型是子类,但是只能调用父类的属性和方法,但如果父类中的方法在子类中重写了,那么调用的就是子类的方法。