Reputation: 2467
This is my base class:
abstract public class CPU extends GameObject {
protected float shiftX;
protected float shiftY;
public CPU(float x, float y) {
super(x, y);
}
and here is one of its subclasses:
public class Beam extends CPU {
public Beam(float x, float y, float shiftX, float shiftY, int beamMode) {
try {
image = ImageIO.read(new File("/home/tab/Pictures/Beam"+beamMode+".gif"));
} catch (Exception e) {
e.printStackTrace();
}
this.x = x;
this.y = y;
this.shiftX = shiftX;
this.shiftY = shiftY;
}
The New constructor is highlighted and it says:
Constructor CPU in class CPU cannot be applied to given types:
required: float, float
found: no arguments
How to solve it?
Upvotes: 9
Views: 29511
Reputation: 79
If you don't specify any default constructor then at the compile time it will give you this error "constructor in class cannot be applied to given type;" Note: If you created any parameterized constructor.
Upvotes: 2
Reputation: 28752
The final object needs to in initialize the super class using one of its constructors. If there is a default (no-parameter) constructor then the compiler calls it implicitly, otherwise the subclass constructor needs to call it using super
as the first line of its constructor.
In your case, that would be:
public Beam(float x, float y, float shiftX, float shiftY, int beamMode) {
super(x, y)
And remove the assignments to this.x
and this.y
later.
Also, avoid making them protected
, makes it difficult to debug. Instead add getters
and if absolutely necessary setters
Upvotes: 4
Reputation: 533502
I suspect you should write
protected float shiftX;
protected float shiftY;
public CPU(float x, float y, float shiftX, float shiftY) {
super(x, y);
this.shiftX = shiftX;
this.shiftY = shiftY
}
and
public Beam(float x, float y, float shiftX, float shiftY, int beamMode) {
super(x,y,shiftX,shiftY);
try {
image = ImageIO.read(new File("/home/tab/Pictures/Beam"+beamMode+".gif"));
} catch (Exception e) {
throw new AssertionError(e);
}
}
Upvotes: 2
Reputation: 887415
As the error is trying to tell you, you need to pass parameters to your base class' constructor.
Add super(x, y);
Upvotes: 17