3 回答
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
;
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
}
}
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();)
添加回答
举报