2012-04-30 118 views
0

如果我有一个C类它继承B类B类继承类A,然后 如果创建的C类一个目的,是创建超类的对象??如果是的话,怎么样? 如何访问A类的私人会员?创建派生类的对象时创建超类的对象吗?

+2

什么? C类继承B类和C类继承B类?你不是指延期,为什么陈述两次? –

+0

你不能访问'A类'的私人成员 - 它不会出现在你的继承heirachy ... – Nim

+3

你的描述是有点关闭。但如果您想访问父类的私有字段,请将字段更改为“受保护”或更好,然后为这些字段提供访问者。 – user1329572

回答

0
  1. 是的,超类的对象被创建。
  2. 你不能访问你的超类的私人成员,否则他们不会是私人的。你可以在超类中拥有protected或public accessor方法,并且可以返回你的私有变量的值。或者,您可以使用反射来访问私有变量。但是,你可以使用任何东西,不仅仅是超类。
+0

1-否 - 没有创建超类的单独实例。但是,可以使用对超类的引用的引用。 “C is a B ...” –

+0

抱歉..我纠正了这个问题.. –

0

您无法访问类之外的私有变量。

访问它们,

1.你可以让他们公开或保护,但它不是一个好主意。

2.你可以为它编写getter方法这又不是私人的方法,这是很好的做法。

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

提供更多信息,帮助您更好的

+0

抱歉..我更正了这个问题.. –

1

是否超类的对象时,就产生派生类对象时?

的超类的构造号被用来初始化currebt对象的超类定义的状态,但是这并不等于创建超类的一个实例。

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

否参见上文。

如果您创建一个C的实例,你将有一个对象,其最派生类型是C.这个对象将instanceof B,但它可能不会表现得完全像一个普通的B Due公司以压倒一切的方法在C和其他东西。

如果是,怎么办?

模拟。

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

您不能直接从子类访问超类的private成员。这就是访问修饰符的含义。如果您需要访问它们,您需要使用它们,您需要在超类中创建非私有方法(例如getters和/或setter)或更改成员的访问权限。 (另一种方法是使用反射来覆盖private访问修饰符,但您应该只使用它作为最后的手段。最好修复超类代码以提供所需的访问权限......或者指出该子类根本不需要访问。)

+0

抱歉..我更正了这个问题.. –

0

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