0

如果我有一个类 C继承类 B并且类 B继承类 A,那么如果我创建Class C的对象,是否创建了超类的对象?如果是,怎么做??如何访问A 类的私有成员?

4

4 回答 4

1

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

不。

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

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

不,见上文。

如果您创建 C 的实例,您将拥有一个派生最多类型为 C 的对象。该对象将是instanceofB,但由于 C 中的方法覆盖和其他原因,它的行为可能与常规 B 不完全相同。

如果是,怎么做??

没有实际意义。

如何访问 A 类的私有成员?

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

(另一种方法是使用反射来覆盖private访问修饰符,但您应该只将其用作最后的手段。最好修复超类代码以提供所需的访问......或者找出子类没有完全需要访问权限。)

于 2012-04-30T12:15:03.103 回答
0

您不能访问类之外的私有变量。

访问它们,

1. 您可以将它们公开或保护,但这不是一个好主意。

2.你可以为它写getter方法,这又不是私有方法,这是个好方法。

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

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

于 2012-04-30T12:06:47.573 回答
0
  1. 是的,创建了超类的对象。
  2. 您不能访问超类的私有成员,否则它们将不是私有的。您可以在超类中具有受保护的或公共的访问器方法,并且可以返回您的私有变量的值。或者,您可以使用反射来访问私有变量。但是你可以用于任何事情,而不仅仅是超类。
于 2012-04-30T11:57:50.497 回答
0

这取决于您使用的语言。如果您使用 C++,您可以使子类成为超类的朋友,然后您可以访问其公共成员。如果您使用 Java,则可以使用反射来定位超级对象并对其进行反射,但这会带来更多麻烦。

于 2012-04-30T14:36:08.890 回答