为了账号安全,请及时绑定邮箱和手机立即绑定

访问继承的类成员时出错

访问继承的类成员时出错

绝地无双 2023-06-04 16:59:11
我是java的初学者。我想使用基类和派生类的对象访问基类中的扩展(继承类的数据成员)。但是我遇到了这个错误:令牌“bonus”上的语法错误,尝试访问成员时此令牌后应为 VariableDeclaratorId使用基类和派生类的对象的奖励如果我将对象创建和访问的代码放在 public static void main 方法中,这个错误就会消失。我想了解这是什么原因?public class DerivedClass{    public int bonus = 100;    public static void main(String[] args) {    // TODO Auto-generated method stub    }}class BaseClass extends DerivedClass {    BaseClass b = new BaseClass();    DerivedClass d = new DerivedClass();    b.bonus = 200; //error here    d.bonus = 400; //error here    System.out.println("bonus this year is:"+" "+ s.bonus);}错误信息:令牌“bonus”的语法错误,此令牌后应为 VariableDeclaratorId
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

将它包装在一个方法中,您将看到两者都有效。不允许直接在类主体中编写代码块。


class BaseClass extends DerivedClass {    

    public static void main(String[] args) {

        BaseClass b = new BaseClass();

        DerivedClass d = new DerivedClass();

        b.bonus = 200;

        d.bonus = 400;

    }

}

有初始化器,尽管它们也必须在{}.


{

    BaseClass b = new BaseClass();

    DerivedClass d = new DerivedClass();

    b.bonus = 200;

    d.bonus = 400;

}

类主体具有明确定义的结构(字段声明、方法声明、块声明)。您只需遵循该结构即可。


8.1.6. 类主体和成员声明

类主体可以包含类成员的声明,即字段 (§8.3)、方法 (§8.4)、类 (§8.5) 和接口 (§8.5)。


类主体还可以包含类的实例初始值设定项 (§8.6)、静态初始值设定项 (§8.7) 和构造函数声明 (§8.8)。


ClassBody:

  { {ClassBodyDeclaration} }


ClassBodyDeclaration:

  ClassMemberDeclaration 

  InstanceInitializer 

  StaticInitializer 

  ConstructorDeclaration


ClassMemberDeclaration:

  FieldDeclaration 

  MethodDeclaration 

  ClassDeclaration 

  InterfaceDeclaration 

  ;


查看完整回答
反对 回复 2023-06-04
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

  • 您应该阅读“Head First Java”一书。

  • 在您的代码中,您试图更改对象的状态,这就是您收到错误的原因。你可以在方法或块中做这样的事情。

  • DerivedClass 应该调用 BaseClass,而 BaseClass 应该调用 DerivedClass(这基于 extends 关键字。)

  • 糟糕的代码(具有主要方法的超类。);我刚刚删除了编译错误,请参见下面的代码。

希望对你有帮助。

public class DerivedClass {

    public int bonus = 100;

    public static void main(String[] args) {

    // TODO Auto-generated method stub


    }


}


class BaseClass extends DerivedClass {

    BaseClass b = new BaseClass();

    DerivedClass d = new DerivedClass();

    // code in block

    {

        b.bonus = 200; // no here

        d.bonus = 400; // no here

        System.out.println("bonus this year is:" + " " + d.bonus); // fixed typo

    }

}


查看完整回答
反对 回复 2023-06-04
?
烙印99

TA贡献1829条经验 获得超13个赞

不允许直接在类主体中编写语句。你需要把它们放在一个方法中。

不允许声明意味着不允许以下任何内容:

Assignment expressions (aValue = 23.45;) Any use of ++ or -- (aValue++;) Method invocations (System.out.println("Hello World!");) Object creation expressions (Car mycar = new Car();)


查看完整回答
反对 回复 2023-06-04
  • 3 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信