неявный суперконструктор Shape2D() не определен. что касается включения Java.awts.Color

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

Вот мой класс формы

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);
    }
}

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


person 72iskcraft    schedule 10.11.2019    source источник


Ответы (1)


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

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

    }

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

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 должен убедиться, что вызывается конструктор родительского класса.

person Saurabh    schedule 10.11.2019
comment
спасибо, с вашей помощью я смог выяснить, как явно вызвать мой другой конструктор. ответ заключался в том, чтобы включить переменные в конструктор не по умолчанию, а затем использовать супер - person 72iskcraft; 11.11.2019