正方形继承矩形的代码问题

Greg_han 2010-03-01 09:19:10
继承的用法有些困惑,请大家看看这段代码:正方形的面积输出有问题
class Program
{
static void Main(string[] args)
{
circular c = new circular(5);
Console.WriteLine(c.CalculateArea());

rectangle r = new rectangle(3,6);
Console.WriteLine(r.CalculateArea());

square s = new square(8);
Console.WriteLine(s.CalculateArea()); //应该输出64,怎么输出了0?
Console.Read();
}


public abstract class Graph
{
public abstract double CalculateArea();
}


public class circular : Graph
{
private double radius; //半径

public circular()
{
radius = 0;
}

public circular(double _radius)
{
radius = _radius;
}

public void SetRadius(double _radius)
{
radius = _radius;
}

public double GetRadius()
{
return radius;
}

public override double CalculateArea() //子类使用父类的方法
{
return GetRadius() * 3.1415;
}
}


public class rectangle : Graph
{
double length;
private double width;

public rectangle()
{
length = 0;
width = 0;
}

public rectangle(double _length, double _width)
{
length = _length;
width = _width;
}

public double GetLength()
{
return length;
}

public double GetWideh()
{
return width;
}

public void SetLength(double _length)
{
length = _length;
}

public void SetWidth(double _width)
{
width = _width;
}

public override double CalculateArea() //子类使用父类的方法
{
return length * width;
}
}

public class square : rectangle
{

public square()
{
base.SetLength(0);
base.SetWidth(0);
}

public square(double side_length)
{
base.SetLength(side_length);
base.SetLength(side_length);
base.GetLength();
base.GetWideh();
}

new public double CalculateArea() //子类使用父类的方法
{
return base.CalculateArea();
}
}
}
...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzx509 2010-03-01
  • 打赏
  • 举报
回复
正方形的带参构造错了,宽度没有设置。
base.SetLength(side_length);
base.SetLength(side_length);

这个new public double CalculateArea()方法是多余的,要不要没有关系。
criedshy 2010-03-01
  • 打赏
  • 举报
回复
public square(double side_length) 
{
base.SetLength(side_length);
base.SetLength(side_length);
base.GetLength();
base.GetWideh();
}


你有两个base.SetLength(side_length); 你的width还是0,所以得出值还是0
hustcyb 2010-03-01
  • 打赏
  • 举报
回复
这个问题还不好解决
先给为正方形和矩形抽象出一个虚拟的基类RectangleBase:

public abstract class RectangleBase : Graph
{
#region Properties

public abstract double Length
{
get;
set;
}

public abstract double Width
{
get;
set;
}

#endregion

#region Graph Members

public override double CalculateArea()
{
return Length * Width;
}

#endregion
}

然后让矩形和长方形分别继承自此虚拟基类

public class Rectangle : RectangleBase
{
#region Fields

private double length;

private double width;

#endregion

#region Constructors

public Rectangle()
: this(0, 0)
{
}

public Rectangle(double _length, double _width)
{
length = _length;
width = _width;
}

#endregion

#region RectangleBase Members

public override double Length
{
get
{
return this.length;
}
set
{
this.length = value;
}
}

public override double Width
{
get
{
return this.length;
}
set
{
this.length = value;
}
}

#endregion
}

public class Square : RectangleBase
{
#region Fields

private double side;

#endregion

#region Constructors

public Square()
: this(0)
{
}

public Square(double side)
{
this.side = side;
}

#endregion

#region RectangleBase Members

public override double Length
{
get
{
return this.side;
}
set
{
this.side = value;
}
}

public override double Width
{
get
{
return this.side;
}
set
{
this.side = value;
}
}

#endregion
}
兔子-顾问 2010-03-01
  • 打赏
  • 举报
回复
学会debug,这些就不成问题了。
兔子-顾问 2010-03-01
  • 打赏
  • 举报
回复
base.SetLength(side_length);
base.SetLength(side_length);

写错了嘛,有一个是base.SetWidth(side_length);
对吧
michaelnami 2010-03-01
  • 打赏
  • 举报
回复
new public double CalculateArea() //子类使用父类的方法
{
return base.CalculateArea();
}
是不是和这个NEW有关

110,570

社区成员

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

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

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