对于任何派生的类对象,我们需要保证private基础类成员都得到了正确的初始化
这句话怎么理解?既然是private,那么派生类就没有将这些成员继承下来,干嘛还要初始化它们?
在派生类的构造方法执行前先执行基类的构造方法,如果没有初始化private基类成员对派生类的构造方法有什么影响?

解决方案 »

  1.   

     我觉得这话就和恒等式似的..和没说差不多 这初始化我们不做jvm也会做的吧.都有默认值
      

  2.   

    ”在派生类的构造方法执行前先执行基类的构造方法,如果没有初始化private基类成员对派生类的构造方法有什么影响?“   
    答: 没有影响。“对于任何派生的类对象,我们需要保证private基础类成员都得到了正确的初始化”, 看就是翻译的啊,晦涩...如果要保证"private基础类成员都得到了正确的初始化", 那也是父类自己的事情;跟子类无干。
      

  3.   

    其实private的东西也继承下来了,只不过你无法直接访问它。
      

  4.   

    “保证private基础类成员正确的初始化”不过是一个概念,并不是说就一定要手动初始化,Java里面的成员变量都会被初始化为默认值,但并不都要显式的初始化,“保证private基础类成员正确的初始化”其实是指的显式初始化,是要按程序员自己的意愿完成的初始化。“派生类就没有将这些成员继承下来”,所以父类的private属性的初始化工作就交给了父类的构造方法,也是为什么子类构造方法第一句就要调用父类构造方法的原因。试想一下,假设父类的某个属性i在构造方法里面被赋值为1,如果子类构造方法在调用父类构造方法之前调用了super.print(i),那i值就是0,这显然不是想要的结果,所以调用父类构造方法必须在子类构造方法的第一句,这是一个保证,保证先初始化完父类。其实个人认为,所谓父类子类本质上是子类对象里面包含了一个父类对象,所谓继承根本就是包含而已,只是子类对象里面包含的这个父类对象某些东西无法访问。
      

  5.   

    private 修饰的其实派生类是继承了的,知识不可见而已!
    构造方法执行的顺序是先会调用直接父类的构造(一般默认为无参的,也可指定具体的构造)这是一个上溯的过程直到object结束
      

  6.   


    java会自动为没有初始值的数据成员按照其类型赋默认值,初始化只是按照程序员的意愿给数据成员赋初值这样理解对不对?既然这样所谓的正确与否实际上指的就是是否符合程序员的意愿而不是真正意义上的错误?
      

  7.   


    是,如果说子类构造方法第一句并不是调用父类构造方法,就有可能违背编写父类的程序员的意志,当然,这只是一种可能性,这当然不能算错误,因为编译通得过,运行也不会出异常,但是Java的设定不允许这种可能存在,于是把这个划入了编译错误里面,这是一种严谨的态度。
      

  8.   

    欣赏tassdars 这类有深度的回答。