构造函数中的静态

时间:2012-02-21 06:24:08

标签: java inheritance static

当我在第2章遇到这个问题时,我正在阅读OCPJP(SCJP)一书。

class Uber{
 static int y= 2;
 Uber(int i){
    this();
    y = y*2;
 }

 Uber(){
    y++
 }

}

class Minor extends Uber{
 Minor(){
    super(y);
    y=y+3;
 }

 public static void main(String[] args){
    new Minor();
    System.out.println(y);
 }

}

这本书的答案应该是9,但我很困惑编译器是否会识别super(y)中的y;如果它确实如何呢?

提前完成。

2 个答案:

答案 0 :(得分:1)

不,您提供的代码无法编译。如果Minor扩展Uber,它会编译 - 你确定它不在书中吗?

(即使在编译之后,代码也为我打印7,而不是9.我看不出它最终打印9 ...它从2开始,然后加倍到4,然后3是添加到7 ...)

答案 1 :(得分:0)

class Uber{
 static int y= 2;
 Uber(int i){
    this();
    y = y*2;
 }

 Uber(){
    y++
 }
}

class Minor extends Uber{
 Minor(){
    super(y);//this called uber class and it perfoms y =Y*2 so y contains now 4.
    y=y+3;//here y value becomes 7
 }

 public static void main(String[] args){
    new Minor();//it called minor class
    System.out.println(y);//It prints 7
 }
}

我评论你的代码。值y变化你可以看到。