关于父类和子类的属性方法调用

在 父类 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,子类自己的属性和方法无法访问,这说明声明的是什么类型,得到的就是什么类型。

结果如下:

 

 

这种情况如果想调用子类的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;
        }

    }

运行结果如下

 

 

总结一下:

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

 

posted @ 2022-07-19 00:47  luytest  阅读(403)  评论(0编辑  收藏  举报