Использование абстрактного класса и супер () - PullRequest
0 голосов
/ 11 декабря 2018

Я создал абстрактный класс фигур для 2d игры, но я получаю ошибку в обоих классах фигур.Ошибка как-то связана с super ().Там могут быть и другие ошибки.Я также показал, где я получаю ошибку в коде.Супер () подходит для использования.

Класс формы

public abstract class Shape {

    int Y;
    int WIDTH;
    int HEIGHT;
    int DIAMETER;

    public Shape(int Y, int WIDTH, int HEIGHT, int DIAMETER) {
        this.Y = Y;
        this.WIDTH = WIDTH;
        this.HEIGHT = HEIGHT;
        this.DIAMETER = DIAMETER;
    }

    public abstract void paint(Graphics g);

}

Класс ракетки

public class Racquet extends Shape {

    int x = 0;
    int xa = 0;
    private Game game;

    public Racquet(int Y, int WIDTH, int HEIGHT) {
        super(Y, WIDTH, HEIGHT); // <- **Error Here**

    }

    public void move() {
        if (x + xa > 0 && x + xa < game.getWidth() - this.WIDTH)
            x = x + xa;
    }

    public void paint(Graphics r) {
        r.setColor(new java.awt.Color(229, 144, 75));
        r.fillRect(x, Y, this.WIDTH, this.HEIGHT);
    }

    public Rectangle getBounds() {
        return new Rectangle(x, this.Y, this.WIDTH, this.HEIGHT);
    }

    public int getTopY() {
        return this.Y - this.HEIGHT;
    }
}

Класс мяча

import java.awt.*;

public class Ball extends Shape {

    int x = 0;
    int y = 0;
    int xa = 1;
    int ya = 1;
    private Game game;

    public Ball(Integer DIAMETER) {
        super(DIAMETER); // <- **Error Here**
    }

    void move() {
        if (x + xa < 0)
            xa = game.speed;
        if (x + xa > game.getWidth() - this.DIAMETER)
            xa = -game.speed;
        if (y + ya < 0)
            ya = game.speed;
        if (y + ya > game.getHeight() - this.DIAMETER)
            game.CheckScore();
        if (collision()) {
            ya = -game.speed;
            y = game.racquet.getTopY() - this.DIAMETER;
            game.speed++;
        }
        x = x + xa;
        y = y + ya;

    }

    private boolean collision() {
        return game.racquet.getBounds().intersects(getBounds());
    }

    public void paint(Graphics b) {

        b.setColor(new java.awt.Color(237, 238, 233));
        b.fillOval(x, y, this.DIAMETER, this.DIAMETER);
    }

    public Rectangle getBounds() {
        return new Rectangle(x, y, this.DIAMETER, this.DIAMETER);
    }
}

Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Вызывая super(...), вы фактически вызываете конструктор суперкласса.В суперклассе у вас есть только один конструктор, который ожидает 4 параметра: Shape(int Y, int WIDTH, int HEIGHT, int DIAMETER), поэтому вы должны либо указать 4 параметра при вызове super(...), либо предоставить необходимые конструкторы в суперклассе с 3 параметрами и с 1 параметром

0 голосов
/ 11 декабря 2018

Ваш класс Shape не имеет конструктора с тремя параметрами или одним параметром.Возможно, вы захотите использовать

в классе recquet

super(Y, WIDTH, HEIGHT, 0);

в классе Ball

super(0, 0, 0, DIAMETER);
0 голосов
/ 11 декабря 2018

Shape не имеет конструкторов, которые соответствуют параметрам, которые вы используете в Racquet и Ball.С точки зрения «лучшей практики», поскольку Болл и Ракет должны логически строиться по-разному, может быть лучше использовать композицию, а не наследование.

...