新手求教一个关于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()子类修改,
与父类的行为一致。