Если в классе создаю конструктор - не могу наследовать класс, что можно сделать?

110
04 декабря 2019, 17:00
class Salad{
    private int numIngridients;
    public Salad(int numIngridients){
        this.numIngridients = numIngridients;
    }
    public String[][] salatik(){
        String[][] salaticOK = new String[numIngridients][3];
        return salaticOK;
    }
}
class Calories extends Salad {
}

Error: java: constructor Salad in class Salad cannot be applied to given types; required: int found: no arguments reason: actual and formal argument lists differ in length

При наведении на второй класс, в котором хочу наследовать первый - пишет "There is no default constructor available in 'Salad' "

Как можно наследовать класс в таком случае?

Answer 1

Сообщение об ошибке

Error: java: constructor Salad in class Salad cannot be applied to given types; required: int found: no arguments reason: actual and formal argument lists differ in length

гласит что у Вас отсутствует конструктор по умолчанию в классе, от которого вы пытаетесь унаследоваться

Конструктор по умолчанию это конструктор без аргументов, он подразумевается для классов, у которых в листинге нет ни одного конструктора и его нет у классов с уже объявленным конструктором с аргументами

public Salad(){}

Вот так должен выглядеть класс:

class Salad {
    private int numIngridients;
    public Salad(){}
    public Salad(int numIngridients){
        this.numIngridients = numIngridients;
    }
    public String[][] salatik(){
        String[][] salaticOK = new String[numIngridients][3];
        return salaticOK;
    }
}

Еще наследование возможно, если вы явно наследнике укажете один из существующих конструкторов, который будет вызван при конструировании наследника:

class Calories extends Salad {
    public Calories (int numIngridients){
        super(numIngridients);
    }
}
Answer 2

There is no default constructor available in 'Salad'.

Нет конструктора по умолчанию в классе Salad, так создайте его.

Answer 3

There is no default constructor available in 'Salad' "

Если нет конструктора по умолчанию в суперклассе, а есть в подклассе, то можно создать конструктор без аргументов в суперклассе (если этого сделать нельзя, то см. далее). Без этого невозможно создать экземпляр подкласса, так как конструктор по умолчанию является конструктором без аргументов (обратное неверно) и он будет неявно вызывать такой же конструктор суперкласса при создании экземпляра подкласса. И если в подклассе есть какой-нибудь конструктор, то конструктор по умолчанию не существует.

Для создания экземпляра подкласса требуется последовательно вызывать конструкторы суперклассов, поэтому если какой нибудь из конструкторов отсутствует, то его надо создавать явно. Если в суперклассе есть конструктор с аргументами, следовательно отсутствует конструктор по умолчанию, и в подклассе нужно создавать такой же конструктор, который вызывает конструктор суперкласса и передаёт ему аргументы. Для этого в первой строке конструктора подкласса надо вызывать конструктор суперкласса следующим образом

super(*args*);

Что-то наподобие того как в этом ответе.

Здесь не важно какой конструктор и сколько у него аргументов, главное чтобы вызывался конструктор суперкласса при создании подкласса.

Если в подклассе есть конструктор без аргументов, то он будет вызываться неявно из конструктора по умолчанию, но в данном случае такого конструктора нет, и по этой причине возникает ошибка.

READ ALSO
BigDecimal автодобавление 0

BigDecimal автодобавление 0

Хочу получить на выходе (1) без скобок

130
Как сделать выборку только из одной таблицы?

Как сделать выборку только из одной таблицы?

Есть 4 таблицы в базе и все они связаны между собой,нужно вывести данные только из одной таблицыИспользую hibernate, и когда вывожу данные из одной...

117
интерфейсы и классы java [закрыт]

интерфейсы и классы java [закрыт]

Помогите пожалуйста разобраться с заданиемЯ только начал изучать язык JAVA и пока с этим есть некоторые трудности Суть задачи:

103
Java получение сырых данных из mp3

Java получение сырых данных из mp3

У меня есть короткий mp3 файл из которого мне нужно получить сырую аудио-дорожку в виде массива для последующего преобразования ФурьеЯ пытался...

119