一个关于继承的小疑问

try23 2007-10-25 11:50:11
    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;
}
}

新手,问题:return pi * x * x;这是子类Circle中求面积的方法,为什么是pi * x * x,而不是子类Circle中定义的radius呢?例如写成pi * radius * radius这个样子呢?
如果说Circle是通过继承了好几次来的类,那还得跑到最初的基类中找定义的变量吗.
...全文
83 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
3000sunqin 2007-10-25
  • 打赏
  • 举报
回复
子类在被创建时,其实整个继承链上的对象的创建动作都被创建了,当在子类构造函数中不调用基类构造函数的时候,基类应该也调用了缺省的构造函数.
可以跟踪看一下.
mywisest 2007-10-25
  • 打赏
  • 举报
回复
同上。
沉默的糕点 2007-10-25
  • 打赏
  • 举报
回复
问题1。
子类Circle根部没有定义radius的成员变量
问题2。
是的。这是面向对象编程的优势哦~
changkimkim 2007-10-25
  • 打赏
  • 举报
回复
public Circle(double radius)
: base(radius,0)
{

}

这句已经是把radius的值赋给x了
这么写是为了体现继承的用法的
你完全可以在Circle 中自己定义字段,然后用
但是这里你不能直接用pi * radius * radius
因为radius是构造函数Circle的私有变量
psychese 2007-10-25
  • 打赏
  • 举报
回复
调用基类的构造函数
deansroom 2007-10-25
  • 打赏
  • 举报
回复
radius只是作为参数传递使用,作用域只在构造函数之内

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧