如果我有一个类 C继承类 B并且类 B继承类 A,那么如果我创建Class C的对象,是否创建了超类的对象?如果是,怎么做??如何访问A 类的私有成员?
4 回答
创建派生类的对象时是否创建了超类的对象?
不。
超类构造函数用于初始化当前对象的超类定义状态,但这并不等于创建超类的实例。
如果我有一个继承类B的类C,而类B继承类A,那么如果我创建一个C类的对象,是否创建了超类的对象?
不,见上文。
如果您创建 C 的实例,您将拥有一个派生最多类型为 C 的对象。该对象也将是instanceof
B,但由于 C 中的方法覆盖和其他原因,它的行为可能与常规 B 不完全相同。
如果是,怎么做??
没有实际意义。
如何访问 A 类的私有成员?
您不能private
从子类直接访问超类的成员。这就是private
访问修饰符的含义。如果您需要访问它们,则需要使用它们,您要么需要在超类中创建非私有方法来执行此操作(例如 getter 和/或 setter),要么更改成员的访问权限。
(另一种方法是使用反射来覆盖private
访问修饰符,但您应该只将其用作最后的手段。最好修复超类代码以提供所需的访问......或者找出子类没有完全需要访问权限。)
您不能访问类之外的私有变量。
访问它们,
1. 您可以将它们公开或保护,但这不是一个好主意。
2.你可以为它写getter方法,这又不是私有方法,这是个好方法。
3.您可以使用反射来访问它。
提供更多信息以更好地帮助您
- 是的,创建了超类的对象。
- 您不能访问超类的私有成员,否则它们将不是私有的。您可以在超类中具有受保护的或公共的访问器方法,并且可以返回您的私有变量的值。或者,您可以使用反射来访问私有变量。但是你可以用于任何事情,而不仅仅是超类。
这取决于您使用的语言。如果您使用 C++,您可以使子类成为超类的朋友,然后您可以访问其公共成员。如果您使用 Java,则可以使用反射来定位超级对象并对其进行反射,但这会带来更多麻烦。