OVE*_*ONE 5 c# inheritance constructor
我还在学习C#,只是有一个关于继承的基本问题.
可以说我有一个抽象类SportsPlayer:
public abstract class SportsPlayer
{
string name; /*1ai*/
int age; /*1aii*/
Sexs gender; /*1aiii*/
//1b
public SportsPlayer(string n, int a, Sexs g)
{
this.name = n;
this.age = a;
this.gender = g;
}
}
Run Code Online (Sandbox Code Playgroud)
一个子类叫做SoccerPlayer:
public class SoccerPlayer : SportsPlayer
{
Positions position;
public SoccerPlayer(string n, int a, Sexs g, Positions p)
: base(n, a, g)
{
this.position = p;
}
//Default constructor
public SoccerPlayer()
{
}
Run Code Online (Sandbox Code Playgroud)
是否有可能在子类上创建一个没有参数传递的构造函数,或者我是否认为为了在子类上创建默认构造函数,超类必须也有一个默认构造函数?
另外,如果我要向超类添加默认构造函数,我如何在子类构造函数中初始化超类变量?在java中super(),在C#中它是??
public SoccerPlayer():base()
{
base.name = "";
}
Run Code Online (Sandbox Code Playgroud)
???
您可以在派生类上创建无参数构造函数,但仍需要将参数传递给基类构造函数:
//Default constructor
public SoccerPlayer()
: base("default name", 0, default(Sexs))
{
}
Run Code Online (Sandbox Code Playgroud)
或者您可以向基类添加默认构造函数...
你可以在子类中使用一个参数less constructor,但是你需要像这样调用base或同一个类的参数化构造函数
public Child():base(1,2,3)
{
}
Run Code Online (Sandbox Code Playgroud)
要么
public Child(): this(1,2,3)
{
}
Run Code Online (Sandbox Code Playgroud)
在你的情况下,它没有多大意义.足球运动员不能拥有默认名称或年龄.