#java
#java
Вопрос:
Вот класс, и ошибка при flyBehavir
объявлении, прямо над точкой с запятой
package simUduck;
public class duck {
void display(){
}
Fly flyBehaviour;
flyBehaviour = new Fly();
}
Вот класс Fly
package simUduck;
public class Fly {
void fly(){
}
}
На самом деле мне не нужна инициализация в duck
классе, я просто хочу, чтобы там была ссылка, и дочерние классы инициализируют ее. Любая помощь будет оценена.
Следующий оператор не выдает никакой ошибки
Fly flybehavior = new Fly();
Ответ №1:
flyBehaviour = new Fly();
является оператором вне метода. Это недопустимо. Каждый оператор должен находиться внутри блока метода, конструктора или инициализатора.
Так что либо перепишите его как инициализатор (как вы показали в своей последней строке), либо поместите его в конструктор:
public Duck() {
flyBehaviour = new Fly();
}
(Также обратите внимание, что я написал с заглавной Duck
буквы, потому что по соглашению все классы должны быть прописными в Java).
Комментарии:
1. обычно нет проблем с объявлением как таковым, но почему в этом случае? ‘Это не разрешено’, где именно? Если вы объявите его внутри класса, в этом нет ничего плохого.
2. Вы должны различать выражения как часть объявления поля (т. Е. Что-то вроде
private Fly flyBehaviour = new Fly()
) и операторы (т. Е. «делать что-то» — вещи), такие как оператор присваиванияflyBehaviour = new Fly()
илиSystem.out.println("Hello")
. Более поздняя категория может существовать только в некотором блоке кода (методы, конструкторы или инициализаторы) и не может просто «свободно перемещаться в классе»).