首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hi.using扩展能力超强

hi.using扩展能力超强
EN

Stack Overflow用户
提问于 2012-04-01 22:57:37
回答 1查看 25关注 0票数 0

我的代码是这样的

代码语言:javascript
复制
public class B {
    public B(int f) {

    }

}


public class A extends B{

    int f=4;
    public A() {
        super(f);
    }

}

为什么会出现编译错误?

EN

回答 1

Stack Overflow用户

发布于 2012-04-01 23:28:55

为了创建一个类A的实例,Java的行为就像它先超级创建一个B的实例,这意味着超类的构造函数()将被调用(或者在本例中,您自己调用它),然后然后“添加”类A的属性。这也是为什么()调用总是必须是构造函数中的第一条指令。

您正在尝试传递一个参数,在某种意义上,这个参数还不存在,因为您试图在调用()之前读取f

您可以执行以下操作:

代码语言:javascript
复制
public class A extends B {
    static final int F_CONST = 4;
    int f = F_CONST;

    public A() {
        super(F_CONST);
    }
}

这里的F_CONST是一个常量“静态”变量,它是一个“类变量”,而不是“对象或实例变量”。静态成员将在类加载到内存中时初始化,这是在调用任何构造函数之前。编译器甚至可以直接用值4替换F_CONST,这也是一个简单的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9965354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档