“Constructor cannot be applied to given types” when constructors have inheritance

前端 未结 4 758
一生所求
一生所求 2020-12-19 04:07

This is my base class:

abstract public class CPU extends GameObject {
    protected float shiftX;
    protected float shiftY;

    public CPU(float x, float          


        
相关标签:
4条回答
  • 2020-12-19 04:12

    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.

    0 讨论(0)
  • 2020-12-19 04:20

    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);
        }
    }
    
    0 讨论(0)
  • 2020-12-19 04:31

    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

    0 讨论(0)
  • 2020-12-19 04:39

    As the error is trying to tell you, you need to pass parameters to your base class' constructor.

    Add super(x, y);

    0 讨论(0)
提交回复
热议问题