using System;
static class m
{
static void Main()
{
point rp=new rectpoint(12, 15);
rp.show();
}
}
class point
{
protected int m_x;
protected int m_y;
public virtual void show()
{
Console.WriteLine("x=" + m_x.ToString() + " y=" + m_y.ToString());
}
}
class rectpoint:point
{
public rectpoint(int x0, int y0)
{
m_x=x0;
m_y=y0;
}
public override void show()
{
Console.WriteLine("rect: ");
base.show();
}
}
问题来自于第7行:point rp=new rectpoint(12, 15);,我想正确的写法应该是rectpoint rp=new rectpoint(12, 15);,但拷贝代码时,没有把point改为rectpoint,但程序运行正常,运行的结果还是rectpoint的show。很后面才发现这个问题,难道是对象是允许定义成它的父类的吗?定义完成后,虽然它执行的都是子类的代码,但如果子类新增加的东西,编译器是不让通过的,即对象只能执行父类的成员函数。