我正在尝试创建一个依赖于square
基类的polygon
继承类。不幸的是,我的继承类有一个错误。
这是我的polygon
课程:
class Polygon
{
public int Numberofsides { get; set; }=0
public Polygon(int numberofsides)
{
Numberofsides = numberofsides;
}
}
这是我的Square
课程:
class Square : Polygon
{
public float Size { get; set; }
public Square (float size)
{
Size = size;
Numberofsides = 4;
}
}
我的Square
班级有此错误
没有给出的参数对应于'Polygon.Polygon(int)'所需的形式参数'numberofsides'
我不明白并知道如何解决它。
答案 0 :(得分:4)
你的方块继承自Polygon
,但Polygon
只有一个构造函数(我假设),你必须能够在每次创建Square
时调用它:
public Square (float size) : base(4)
{
Size = size;
//Numberofsides = 4;
}
然后,您可以将作业排除在NumberOfSides
中的Square
,因为已经通过Polygon
答案 1 :(得分:1)
看起来问题是您的基类Polygon没有任何无参数构造函数。因此,您必须使用派生类的构造函数中的参数调用基类的构造函数。
class Polygon
{
public int Numberofsides { get; set; }
public Polygon()
{
Numberofsides = 0;
}
public Polygon(int numberofsides)
{
Numberofsides = numberofsides;
}
}
class Square : Polygon
{
public float Size { get; set; }
public Square (float size)
{
Size = size;
Numberofsides = 4;
}
}
现在你的Polygon类有一个默认的构造函数,它不接受任何参数。这样,当您在Square类中继承它时,它最初设置为0,以便您可以在Square类构造函数中将其修改为4.
答案 2 :(得分:1)
" Polygon"中没有基础(或无参数)构造函数。可以保存派生构造函数的类" s" float"参数。
要解决:
或
对于虚拟解决方案尝试转换为int,如上所述
public Square(float size):base((int)size)
答案 3 :(得分:1)
Jonesopolis'答案是修复错误的解决方案。
但是你不应该以这种方式使用继承。这是经典的问题:"矩形应该继承自Square还是Square应该继承Recangle"答案不是。 (例如,这里讨论:https://softwareengineering.stackexchange.com/questions/238176/why-would-square-inheriting-from-rectangle-be-problematic-if-we-override-the-set)
这同样适用。你的Square不应该继承Polygon。因为如果有人获得了Polygon类型的对象(类实例),他可能不会期望对Square有限制。它违反了Liskov Substitution原则:
可替代性是面向对象编程说明的一个原则 在计算机程序中,如果S是T的子类型,那么对象是 类型T可以用类型S的对象(即类型的对象)替换 T可以用子类型S)的任何对象代替而不改变 T的任何理想属性(正确性,任务执行, 等)。