Проблема наследования классов Java: синтаксическая ошибка на токене "{", {ожидается после этого токена - PullRequest
1 голос
/ 09 октября 2019

По какой-то причине компилятор говорит, что я принял символ за ... правильный символ?

Я уже видел ошибку этого типа, например, если вы ошиблись в массивах javascriptс массивами java он выдаст аналогичную ошибку, однако скажет, что два символа совмещены.

int[] pi_digits = [3, 1, 4, 1, 5];
//Should be int[] pi_digits = {3, 1, 4, 1, 5};

Ошибка:

Syntax error on token "[", { expected after this token

Я ужепопытался (что я думал) были наиболее очевидные решения - я полностью удалил фигурные скобки из второго класса (к счастью, это не сработало), и я также попытался поместить их в тот же класс, который имел те же проблемы.

Третье, что я попробовал, почти решило проблему. По какой-то причине добавление второго набора фигурных скобок решило проблему для компилятора, однако во время выполнения ни один код фактически не скомпилировался, а имя и описание вернули ноль.

Файл FirstClass:

package p;

abstract class FirstClass {

    String name;
    String description;
    ...
}

Файл второго класса:

package p;

public class SecondClass extends FirstClass { //Error 1 here


    Name = " ... ";
    Description = " ... ";
    ...

} //Error 2 here

Ошибка 1: «Синтаксическая ошибка на токене» {«, {ожидается после этого токена» *

Ошибка 2: «Синтаксическая ошибка на токене"} ",} ожидается после этого токена "

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

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

Я думаю, ваша инициализация переменной была неправильной. Вы не можете инициализировать родительские переменные внутри класса, как вы делали выше. Вы можете создать один метод, затем вы можете инициализировать родительские переменные внутри метода и вызывать метод после создания объекта. Или вы можете инициализировать родительские переменные внутри конструктора, который будет автоматически инициализироваться при создании объекта типа B.

Class A{
    String a;
    String b;
}
Class B extends A{
   public  B(){
      a = "some name";
      b = " second name";
   }
  public initByMethod(){
     a= " good";
     b= "bad";
   }
}
//Inside the main method
B object =new B();
System.out.println(object.a);//"some name"

Когда вы печатаете ba, он выдаст «некоторое имя» в качестве вывода,После вызова метода, как показано ниже, затем вы вызываете, вы получите «хорошо» в качестве вывода

Inside the main method
object.initByMethod();
System.out.println(object.a);// " good"

Это может помочь вам

1 голос
/ 09 октября 2019

Что пошло не так в вашем втором классе, так это то, что вы пропустили типы данных в переменных уровня класса.

package p;

public class SecondClass extends FirstClass {

    String name = " ... ";         // Added data type 'String'
    String description = " ... ";  // Added data type 'String'

}

Обратите внимание, что это не обязательно переопределяет поля name и description. Повторное объявление этих полей с другим типом данных в другом подклассе возможно:

package p;

public class ThirdClass extends FirstClass {

    int name = 5;
    int description = 6;
}
...