‘,’ ожидается вместо ‘;’ при объявлении ссылки в JAVA

#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") . Более поздняя категория может существовать только в некотором блоке кода (методы, конструкторы или инициализаторы) и не может просто «свободно перемещаться в классе»).