这样写为什么不出错:point rp=new rectpoint(12, 15);

在测试这些程序中发现一个问题,这样的代码程序可以通过:

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。很后面才发现这个问题,难道是对象是允许定义成它的父类的吗?定义完成后,虽然它执行的都是子类的代码,但如果子类新增加的东西,编译器是不让通过的,即对象只能执行父类的成员函数。

原文地址:https://www.cnblogs.com/yzx99/p/1209778.html