在 父类 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是类型是子类,但是只能调用父类的属性和方法,但如果父类中的方法在子类中重写了,那么调用的就是子类的方法。