неявный супер-конструктор Shape2D () не определен. в отношении с "включить Java.awts.Color" - PullRequest
0 голосов
/ 10 ноября 2019

Я работаю над проектом, который выдает эту ошибку "неявный супер-конструктор Shape2D не определен. Должна быть простота вызова другого конструктора", и я не совсем понимаю.

Вот мой класс Shape

import java.awt.Color;
import java.lang.Comparable;

abstract class Shape implements Comparable<Shape>{
    private final int id;
    private final String name;
    private final String description;
    private Color color;
    //abstract method
    abstract double area();
    abstract double perimeter();

    //get and set and non-abstract method
    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    public Color getColor() {
        return color;
    }

    public void setColor(Color color) {
        this.color = color;
        }

    //non default constructor
    public Shape(int id, String name, String description, Color color) {
        this.id = id;
        this.name = name;
        this.description = description;
        this.color = color;

    }
    @Override
    public int compareTo(Shape o) {
        return 0;
    }

    @Override
    public String toString() {
        return String.format("%s,%s,%s,%s",id,name,description,color);      
    }


}

и вот мой класс Shape2D, который даст переменные ширины и высоты

import java.awt.Color;// this is where the problem occur. if i remove it, the abstract class has an error " Implicit super constructor Shape() is undefined for default constructor. Must define an explicit 
 constructor and Implicit super constructor Shape() is undefined. Must explicitly invoke another constructor"

abstract class Shape2D extends Shape {
    public final double height;
    public final double width;

    Shape2D(height , width){
        this.height = height; 
        this.width = width;

    }

    public Shape2D(int id, String name, String description, Color color) {
        super(id, name, description, color);
    }
}

У меня есть суперкласс, который

1 Ответ

0 голосов
/ 10 ноября 2019

Поскольку вы расширяете класс Shape в Shape2D, из Shap2D's конструктор java неявно вызывает конструктор суперкласса, если вы не укажете. Таким образом, в настоящее время приведенный выше код будет выглядеть следующим образом:

Shape2D(height , width){
        super();   //this line will automatically added, when code complies.
        this.height = height; 
        this.width = width;

    }

Поскольку в родительском классе Shape у вас нет конструктора args. Он не найдет подходящего конструктора и выдаст ошибку, как вы упомянули. Чтобы избежать этого, вы можете явно указать, какой конструктор суперкласса вызывать. Итак, код будет выглядеть следующим образом:

Shape2D(height , width){
            super(1,"triangle","test",Color.yellow);   //Called parent class's constructor.
            this.height = height; 
            this.width = width;

        }

Вы использовали super(id, name, description, color); в своем другом конструкторе, но всегда можно создать новый экземпляр, используя конструктор Shape2D(height , width). В этом случае Java должна убедиться, что вызывается конструктор родительского класса.

...