新手求教一个关于new的问题
[code=C#][/code]class Program
     {
         static void Main(string[] args)
         {
             GeometricObject g = new Circle(); //父类型引用指向子类型对象g.draw();  
             g.draw(); //draw调用的是哪个类的方法?如果g换成Circle类引用呢?
             //如果Circle类不覆盖draw方法,调用的是哪个类的方法?  
             //double d = g.getArea(); // 编译时能否通过。
             Console.ReadKey();
         }          
     }
     class GeometricObject
     {
         public virtual void draw() { Console.WriteLine("GeometricObject!"); }
     }
     class Ellipse : GeometricObject
     {
         public override void draw() { Console.WriteLine("Ellipse!"); }
         public void getvecter() { }
     }
     class Circle : Ellipse
     {
         public  void draw() { Console.WriteLine("Circle!"); }
         public double getArea() { return 1.0; }
     }
    这段代码运行出来为什么回事Ellipse,而不是GeometricObject?  new的规则不是看引用的类型吗?
------解决方案--------------------楼主 去好好看下 继承里面的一些东西应该就能明白了
------解决方案--------------------你的那几个问题。。调用的都是Circle里的Draw方法,其实你这些问题都可以自己去测试的啊
------解决方案--------------------是粗心了吧?
class Circle中draw()
是否缺少override ?
------解决方案--------------------GeometricObject 可以修改为interface试试
结果很明显嘛,子类继承了父类的行为和特征,
那么反过来,要知道父类的行为和特征,是不是可以从每个派生类中找到其父类的行为和特征呢?
GeometricObject g = new Circle(); //父类型引用指向子类型对象g.draw();
其实就是从子类Circle 得到父类的行为的,g.draw() 调用的是父类的方法,
只不过方法被子类重写了,具体实现被子类改变了。
class test:GeometricObject
{
}
GeometricObject g = new test();  g.draw() 就是引用父类的方法了,实现没被test()子类修改,
与父类的行为一致。