java在构造子类对象的时候先调用父类的构造器,那么此刻是构造了两个对象吗?一父类和一子类对象。如果不是,就是说调用方法不一定创造对象。如果是,那父类是抽象类呢

解决方案 »

  1.   

    继承:子类调用super()无参构造器;举个例子:最好理解执行内存图;
    1、.java文件编译完之后 在内存中后会个代码区存放;
    2、主函数 main放里面的代码按顺序执行,main()进栈
         -ZIDemo zi=new ZiDemo()进堆内存,初始化ZiDemo()的无参构造函数;
        --super()调用父类的无参构造方法;(直接从代码区 拿属性和参数值);不会再创建一个父类对象
         
      

  2.   

    Java 面向对象 之 继承 http://www.verejava.com/?id=16992791427944
      

  3.   

    构造子类是先构造一个父类 然后再在父类的基础上加上子类的 独有属性  就形成了一个子类对象  你说父亲如果是抽象类 但抽象类也可以有构造方法的啊  只是不能直接通过new抽象类调用      new子类时子类构造方法第一句会默认调用父类构造方法初始化父类 也就是super()  
      

  4.   

    应该不会吧。比如我们通过eclipse创建了两个类A和B,其中B继承A。我们所敲到的那些代码(包括构造函数)就保存在系统的某个位置。
    当我们的代码执行到 new B();
    系统就会去取出B的构造函数,准备执行,这个时候,它发现B的构造函数里面还有一个A的构造函数。那么,系统就会找到A的构造函数的那一堆代码,然后执行一遍(因为JAVA语言的关系,这个是必要的)。随后在将自己B类的构造函数的剩余代码执行一遍,给各个数据分配存储空间。在执行A类构造函数的那些代码时,这个构造函数究竟是创建一个A类,还是说给帮B类的构造函数做点事情,应该是由JAVA的设计者决定的。那些语言创始人觉得怎么样合理,就怎么来。这东西并不是绝对性的,完全是由别人所控制的。不过看起来,不创造A类要合理一些。
    另外,不知道有没有静态方法这种东西,可能静态方法在调用的时候,也不需要创建类呢。class BulletAttr{
    // public static BulletAttr(int a) {
    //
    // } 构造函数不能为静态的类型...
    static {
    System.out.println("我是静态代码块,我会被执行吗?");
    }


    public BulletAttr(){
    System.out.println("我是构造函数,我会被执行吗?");
    } static public void print() {
    System.out.println("使用我,会调用构造函数吗?");
    }
    }
    public class EnumTest {
    public static void main(String[] args) {
    BulletAttr.print();
    }
    }
      

  5.   

    调用的只是父类的构造器而已,一个jvm层面的<init>方法。
    调用构造器不代表就一定会创建一个对象,创建对象有很多个步骤,jvm调用<init>只是其中之一。
      

  6.   

    创建衍生类的一个对象时,它在其中包含了基础类的一个“子对象”。这个子对象就象我们根据基础类本身创建了它的一个对象。从外部看,基础类的子对象已封装到衍生类的对象里了。这是thinking in java第四版里面的原话,一个对象,不过这个对象包含了另一个"对象"。