Java类继承问题:令牌“ {”上的语法错误,{预期在此令牌之后

时间:2019-10-09 01:34:28

标签: java inheritance abstract-class

无论出于何种原因,编译器都在说我将符号误认为是...正确的符号?

例如,如果您将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

我已经尝试过(我认为是)最明显的解决方案-我已经完全从第二堂课中删除了花括号(幸运的是,这没有用),并且我还尝试将它们放在同一堂课中,也有同样的问题

我尝试的第三件事几乎解决了这个问题。无论出于何种原因,添加第二组花括号都可以解决编译器的问题,但是在运行时,实际上没有代码被编译,并且名称和描述均返回null。

FirstClass文件:

package p;

abstract class FirstClass {

    String name;
    String description;
    ...
}

SecondClass文件:

package p;

public class SecondClass extends FirstClass { //Error 1 here


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

} //Error 2 here

错误1:“令牌“ {”的语法错误,{预期在此令牌之后”

错误2:“令牌“}”的语法错误,此令牌后应有}”

我不知道出了什么问题,特别是因为它说它应该具有的符号就是被检测到的那个符号。

2 个答案:

答案 0 :(得分:3)

我认为,您的变量初始化错误 您不能像上面所做的那样初始化类中的父变量。您可以创建一个方法,然后可以在方法内部初始化父变量,并在创建对象后调用该方法。 或者,您可以在构造函数中初始化父变量,当创建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"

当您打印b.a时,它将给出“某些名称”作为输出。 调用如下所示的方法后,您将调用,您将获得“好”作为输出

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

这可能对您有帮助

答案 1 :(得分:1)

第二个类出现问题的地方是您省略了类级变量中的数据类型。

package p;

public class SecondClass extends FirstClass {

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

}

请注意,这不一定覆盖字段namedescription。可以在另一个子类中用其他数据类型重新声明这些字段:

package p;

public class ThirdClass extends FirstClass {

    int name = 5;
    int description = 6;
}