访问继承的类成员时出错

我是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


绝地无双
浏览 130回答 3
3回答

大话西游666

将它包装在一个方法中,您将看到两者都有效。不允许直接在类主体中编写代码块。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   ConstructorDeclarationClassMemberDeclaration:  FieldDeclaration   MethodDeclaration   ClassDeclaration   InterfaceDeclaration   ;

婷婷同学_

您应该阅读“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    }}

烙印99

不允许直接在类主体中编写语句。你需要把它们放在一个方法中。不允许声明意味着不允许以下任何内容:Assignment expressions (aValue = 23.45;) Any use of ++ or -- (aValue++;) Method invocations (System.out.println("Hello World!");) Object creation expressions (Car mycar = new Car();)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java