黑马程序员技术交流社区

标题: 继承中的问题 [打印本页]

作者: 唐兴旺    时间: 2012-3-1 00:41
标题: 继承中的问题
class A{
      public A(){
         this.fun();
      }
      public void fun(){
          System.out.println("!!!!");
      }
}
class B extends A{
   private int x=100;
   public B(int x){
      this.x=x;
   }
   public void fun(){
     System.out.println(this.str);
   }
}
public class SuperDemo {
    public static void main(String args[]){
       new B(20);
   }
}
因为子类的实例必须找到父类的无参构造作为出口,但是现在其父类又调用其自身的方法不能执行完就
子类就无法初始化,所以输出结果为 0 。但是在讲子类中的参数x定义为静态之后
private static int x=100;
为什么跳过父类直接执行子类的方法,这和子类实例化要先找到父类的构造方法是不是又矛盾呢?
作者: 李晓俊老师    时间: 2012-3-1 00:47
静态成员在内存中是单独存在的,它和对象的初始化是分别独立完成的,
对象的属性在堆内存中初始化,而静态成员在方法区中初始化,
更重要的是静态成员是随着类的加载而加载,跟对象有没有初始化无关,它一般是先于
对象的初始化完成的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2