相关疑难解决方法(0)

当Base类构造函数在Java中调用重写方法时,Derived类对象的状态

请参考下面的Java代码:

class Base{
     Base(){
         System.out.println("Base Constructor");
         method();
     }
     void method(){}    
}

class Derived extends Base{
    int var = 2;
    Derived(){
         System.out.println("Derived Constructor");  
    }

     @Override
     void method(){
        System.out.println("var = "+var);
     }
 }

class Test2{
    public static void main(String[] args) {
        Derived b = new Derived();
    }
}
Run Code Online (Sandbox Code Playgroud)

看到的输出是:

Base Constructor
var = 0
Derived Constructor
Run Code Online (Sandbox Code Playgroud)

我认为var = 0的发生是因为Derived对象是半初始化的; 类似于Jon Skeet在这里所说的

我的问题是:

如果尚未创建Derived类对象,为什么会调用重写的方法?

在什么时间点,var赋值为0?

是否存在需要此类行为的用例?

java inheritance constructor

12
推荐指数
2
解决办法
4097
查看次数

Java编译器整数错误

我有这个出现在测验中的代码

public class Main {
  public static void main(String[] args) {
    class b {
      int i = 32;
      b() { b(); }
      void b() { System.out.println(++i); }
    }

    class d extends b {
      int i = 8;
      d() {}
      void b() { System.out.println(--i); }
    }

    b b = new d();
  }
}
Run Code Online (Sandbox Code Playgroud)

输出应该是什么?原来答案是-1,而我预计它是7。java 坏了吗?

java

2
推荐指数
1
解决办法
179
查看次数

标签 统计

java ×2

constructor ×1

inheritance ×1