当前位置: 首页 > 知识库问答 >
问题:

错误:Super必须是构造函数中的第一个语句

令狐增
2023-03-14

无法理解为什么会出现此错误。在记事本中工作,通过cmd运行javac(显然更多的是文件)。如果你需要我链接更多,我可以。我的错误发生在“setCruiseShip”中,我试图将电流链接到超类。错误:对super的调用必须是构造函数中的第一条语句。

class Ship
{ protected String name;
  protected float speed;
  protected int year;

  public Ship() {name=""; speed=year=0;}
  public Ship(String n, float sp, int y) {name=n; speed=sp; year=y;}
  public String getName()  {return name;}
  public float  getSpeed() {return speed;}
  public int    getYear()  {return year;}
  public void   setShip(String n, float sp, int y) {name=n; speed=sp; year=y;}
  public String toString() {return "Ship named "+name+ " with max speed of " 
                           +speed+ " was built in " +year;}
}

class CruiseShip extends Ship
{ protected int maxpass;

  public CruiseShip() {super(); maxpass=0;}
  public CruiseShip(String n, float sp, int y, int mp) {super(n, sp, y);
                                                        maxpass=mp;}
  public int  setMaxpass(int mp) {maxpass=mp;}
  public void setCruiseShip(String n, float sp, int y, int mp){super(n,sp,y);
                                                               maxxpass=mp;}
  public String toString() { return super.toString() +" carries "
                            +maxpass+ "  passengers";}
} 

共有3个答案

巫马星雨
2023-03-14

super(somevalues…) 可以从子类的构造函数中调用。Java不允许调用super(somevalues…) 来自方法。此外,当您在子类中定义构造函数时,它的第一个语句应该是super()/super(somevalues)constructor或this(somevalues…) 。如果您不这样做,那么编译器会隐式添加默认的无参数超级构造函数。

this()表示构造函数重载。
给定事实是

public void setCruiseShip(String n, float sp, int y, int mp){super(n,sp,y);

不是子类中的构造函数。

构造函数定义是,构造函数名称必须(我不是说“应该”)与类名相同,没有返回类型,并且允许任何访问修饰符(如私有、默认、受保护、公共)。

因此,设置巡航IP与巡航IP不同

马庆
2023-03-14

只能从子类的构造函数(而不是任何方法)调用超级构造函数。修改和编译的程序如下

class Ship {
    protected String name;
    protected float speed;
    protected int year;

    public Ship() {
        name = "";
        speed = year = 0;
    }

    public Ship(String n, float sp, int y) {
        name = n;
        speed = sp;
        year = y;
    }

    public String getName() {
        return name;
    }

    public float getSpeed() {
        return speed;
    }

    public int getYear() {
        return year;
    }

    public void setShip(String n, float sp, int y) {
        name = n;
        speed = sp;
        year = y;
    }

    public String toString() {
        return "Ship named " + name + " with max speed of " + speed
                + " was built in " + year;
    }
}

class CruiseShip extends Ship {
    protected int maxpass;

    public CruiseShip() {
        super();
        maxpass = 0;
    }

    public CruiseShip(String n, float sp, int y, int mp) {
        super(n, sp, y);
        maxpass = mp;
    }

    public int setMaxpass(int mp) {
        maxpass = mp;
    }

    public void setCruiseShip(String n, float sp, int y, int mp) {
        setShip(n, sp, y);
        maxpass = mp;
    }

    public String toString() {
        return super.toString() + " carries " + maxpass + "  passengers";
    }
}
吕亮
2023-03-14

class Ship没有名为setCruiseShip的方法。您可能需要调用setShip方法。代替

super(n,sp,y);

具有

setShip(n,sp,y);

 类似资料:
  • 我试图用Java做一些事情,但在做构造函数时遇到了问题。我的代码: 工件构造器 Bishop构造函数(从工件扩展): 当我尝试这样做时,我在超级调用中得到一个错误:“super()必须是构造函数体中的第一个语句”。 我看到的唯一修复方法是将super()调用中的“symbole”替换为一个表达式,该表达式将在函数“color”中获得正确的符号,但我无法做到这一点? 我的Symbol类只是一个枚举,

  • 这个Super()的替代品是什么;我代码中的语句...因为它向我显示了一个名为:构造函数调用必须是构造函数中的第一个语句的错误。

  • 问题内容: 以下代码向我返回错误信息: 我不明白。我的代码中的构造函数是第一条语句。我究竟做错了什么? 问题答案: 构造函数名称必须与类名称相同,因此请将类名称更改为或将构造函数名称更改为。 示例 (请注意,在Java中通常第一个字母是大写字母) :

  • 我一直收到这样一个错误:“对super的调用必须是构造函数中的第一条语句”。 问题是它是我的构造函数中的第一个语句。 这也是我的超级班级。 我做错了什么?

  • 问题内容: 我正在编写一个LoginRequest类的构造函数,该类扩展了一个名为JsobObjectRequest的类(来自Android的Volley框架,但这与问题完全无关) 使用此代码: 我收到错误:对super()的调用必须是构造函数主体中的第一条语句 相反,此代码可以正常编译: 但这实际上不是一回事吗?在这两种情况下,根据传递给子类构造函数的参数值,在调用超级构造函数之前都要进行一些简

  • 我正在编写一个LoginRequest类的构造函数,该类扩展了一个名为JsobObjectRequest的类(来自Android的凌空框架,但这与问题完全无关) 使用此代码: 我得到了一个错误:对super()的调用必须是构造函数体中的第一条语句 相反,这段代码编译得很好: 但事实上不是完全一样吗?在这两种情况下,在调用超级构造函数之前,都会根据传递给子类构造函数的参数值进行一些简单的计算。既然编