Rag*_*nur 3 java eclipse inheritance
我一直在使用Eclipse Juno学习继承中的构造函数.
当我在childClass中按两次ctrl + O时,它显示继承的成员.但我碰巧在继承的成员中甚至看到超类的构造函数
但据说构造函数不是继承的......
有人可以解释一下这种行为吗?
与字段,方法和嵌套类不同,构造函数不是类成员.
子类从其超类继承所有成员(字段,方法和嵌套类).构造函数不是成员,因此它们不是由子类继承的,但是可以从子类调用超类的构造函数.
只有成员是继承的,构造函数不被视为成员。
要理解为什么构造函数不被继承,请考虑 OOP 中的继承是允许一个对象被视为另一个更通用的对象的机制的一部分。这要求所有数据成员和所有方法都被继承。
继承的目的并不是允许一个对象以与另一个更通用的对象相同的方式实例化。
这是因为构造函数必须将对象初始化为有效状态,而足以初始化超类对象的有效状态的信息可能不足以初始化子类对象的有效状态!
要解决此问题,如果构造函数是继承的,那么当您从库扩展类时,您必须手动选择退出不想继承的构造函数。这很麻烦并且容易出错,因为当该库的新版本在该基类中出现更多构造函数时,您自己的类现在会受到无效的初始化(通过泄漏的构造函数),除非您也发布更新。或者,在您自己的超类中添加构造函数可能会“破坏”您自己的子类,并且您必须转到每个子类并选择退出新子类。换句话说,代码的有效性将与您使用的基础更加紧密地耦合。
另一方面,通过显式定义您自己的构造函数并将它们与基类的构造函数链接起来,“选择加入”实际上更有意义,并且对于组件的有效性来说更安全。这种选择是通过链接来完成的,即在另一个构造函数的开头调用基类构造函数的过程。
现在 Eclipse (我不使用它,所以我基于你在问题中描述的内容)可能会列出可用于链接的构造函数,因为寻找它们是一个非常常见的场景(除非你'重新调用一个非常简单或无参数的构造函数)。换句话说,为了方便起见,构造函数被列在继承成员中,但正如我们所说,严格来说,它们不是继承的。