首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一个关于继承的小疑问解决办法

2012-01-23 
一个关于继承的小疑问C# codeabstract class Shape{public const double pi Math.PIprotected double x

一个关于继承的小疑问

C# code
    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是通过继承了好几次来的类,那还得跑到最初的基类中找定义的变量吗.

[解决办法]
C# code
public Circle(double radius)            : base(radius,0)        {                    }
[解决办法]
问题1。
子类Circle根部没有定义radius的成员变量
问题2。
是的。这是面向对象编程的优势哦~

[解决办法]
子类在被创建时,其实整个继承链上的对象的创建动作都被创建了,当在子类构造函数中不调用基类构造函数的时候,基类应该也调用了缺省的构造函数.
可以跟踪看一下.
[解决办法]
radius只是作为参数传递使用,作用域只在构造函数之内
[解决办法]
调用基类的构造函数

热点排行