日期:2014-05-18 浏览次数:21035 次
abstract class Shape
{
public const double pi = Math.PI;
protected double x, y;
public Shape(double x,double y)
{
this.x = x;
this.y = y;
}
public abstract double Area();
}
class Circle : Shape
{
public Circle(double radius)
: base(radius,0)
{
}
public override double Area()
{
return pi * x * x;
}
}
public Circle(double radius)
: base(radius,0)
{
}
------解决方案--------------------
问题1。
子类Circle根部没有定义radius的成员变量
问题2。
是的。这是面向对象编程的优势哦~
------解决方案--------------------
子类在被创建时,其实整个继承链上的对象的创建动作都被创建了,当在子类构造函数中不调用基类构造函数的时候,基类应该也调用了缺省的构造函数.
可以跟踪看一下.
------解决方案--------------------
radius只是作为参数传递使用,作用域只在构造函数之内
------解决方案--------------------
调用基类的构造函数