2013-03-11 42 views
0

第一条语句不能找出为什么我得到这个错误。在记事本中工作,通过cmd运行javac(显然更多的是文件)。如果你需要我连接更多我可以。 我的错误发生在“setCruiseShip”,我试图将当前连接到超类。 错误:调用超级必须是构造函数中的第一条语句。错误:超级必须在构造函数

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";} 
} 
+0

使用单独的.java文件相同,也使公众班班。 – codeMan 2013-03-11 08:49:14

+3

'setCruiseShip'不是构造函数,所以它不能调用'super'构造函数。 – 2013-03-11 08:49:20

回答

1

class Ship没有名为setCruiseShip的方法。你可能想要的是调用setShip方法。更换

super(n,sp,y); 

setShip(n,sp,y); 
+0

非常感谢你 – user2155992 2013-03-11 08:53:20

+0

@ user2155992如果是正确的解决方案,请将其标记为正确答案 – uba 2013-03-11 08:57:00

0

超级构造函数只能从子类的(而不是从任何方法)构造函数被调用。下面

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"; 
    } 
} 
+0

非常感谢! – user2155992 2013-03-11 09:08:17

+0

如果您对答案满意,请通过单击“勾号”将其选为答案。 – Joe2013 2013-03-11 09:11:12

0

super(somevalues...)修改和编译的程序给出可以从子类的构造函数被调用。 Java不允许从方法调用super(somevalues...)。当你在子类中定义构造函数时,它的第一个语句应该是super()/super(somevalues)构造函数或this(somevalues...)。如果你不这样做,那么编译器会隐式添加默认的no-arg超级构造函数。

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

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

是不是在子类的构造函数。

构造函数definition是,构造函数名必须(我不是说'应该')与没有返回类型的类名相同,并且允许任何访问修饰符(如private,default,protected,public)。

所以setCruiseShip不为两个类CruiseShip

相关问题