创建派生类的对象时是否创建了超类的对象?

时间:2012-04-30 11:46:09

标签: java

如果我有 C类 ,其继承 B类 B类继承 A类,然后 如果我创建 C类 的对象,是否创建了超类的对象?如果有,怎么样? 如何访问 A类的私人成员

4 个答案:

答案 0 :(得分:1)

  

创建派生类的对象时是否创建了超类的对象?

没有

超类构造函数用于初始化currebt对象的超类定义状态,但这并不等于创建超类的实例。

  

如果我有一个C类继承B类而B类继承A类,那么如果我创建一个C类对象,是否创建了超类的对象?

没有。见上文。

如果你创建了一个C实例,你将拥有一个最大派生类型为C的对象。这个对象instanceof B,但它可能不完全正常因为C和其他方法中的方法覆盖,就像常规B一样。

  

如果是,怎么样?

摸拟。

  

如何访问A类私人成员?

您无法直接从子类访问超类的private成员。这就是private访问修饰符的含义。如果您需要访问它们,您需要使用它们,您需要在超类中创建非私有方法来执行此操作(例如getter和/或setter),或更改成员的访问权限。

(另一种方法是使用反射来覆盖private访问修饰符,但是你应该只使用它作为最后的手段。最好修复超类代码以提供所需的访问权限......或者数字离开,子类根本不需要访问。)

答案 1 :(得分:0)

  1. 是的,创建了超类的对象。
  2. 您无法访问超类的私有成员,否则他们不会是私有的。您可以在超类中使用受保护或公共访问器方法,并且可以返回私有变量的值。或者,您可以使用反射来访问私有变量。但你可以使用任何东西,而不仅仅是超类。

答案 2 :(得分:0)

你无法访问课堂外的私人变量。

访问它们,

1。你可以将它们公之于众或受到保护,但这不是一个好主意。

2。你可以为它编写getter方法,这也不是私有方法,这是很好的方法。

第3。您可以使用反射来访问它。

提供更多信息以帮助您更好地

答案 3 :(得分:0)

这取决于您使用的语言。如果您正在使用C ++,您可以使子类成为超类的朋友,然后您可以访问其公共成员。如果你使用Java,你可以使用反射来定位超级对象并反思它,但它会比它的价值更麻烦。