在C#或Java中进行子类化时是否可以覆盖私有成员?

Ari*_*ule 7 c# java oop inheritance

我正在学习C#和Java,并且有关于继承的问题.

是否可以覆盖超类(基类)中的私有成员?在我看来,它不正确,因为访问修饰符会阻止访问该成员.

Jig*_*shi 5

private类的方法在其子类中可见,因此它们不会被继承.


Abh*_*hek 5

这不是一个愚蠢的问题,但它提供了隐藏变量的另一个概念.

Java中的字段只是隐藏而不是实际被覆盖(这并不意味着我们在尝试时会遇到编译时错误,而不是真正意义上的覆盖它们).覆盖意味着应该根据对象的运行时类型调用成员,而不是基于声明的类型.但是Java中字段的绑定始终是静态的,因此它仅基于对象引用的声明类型.阅读文章中的静态绑定的更多信息 - 动态绑定与静态绑定>>

在方法的情况下,只有那些被继承的方法被覆盖,因此静态方法也不会被覆盖但只是隐藏,它们只遵循静态绑定.私有成员(方法或字段)既不隐藏也不重写.它们也遵循静态绑定,它们不能直接从任何其他类(包括子类)访问,除了具有它们的类.记住,隐藏并不意味着我们不能从子类访问成员.因此,不要混淆不可访问(如果是私有成员 - 字段或方法)和隐藏.


Mic*_*rry 5

不,你不能覆盖private元素,它们实际上是最终的(因为从子类中永远不会看到它们被覆盖.)

您可以private在子类中声明具有相同名称的元素,但这不会覆盖超类中的元素 - 它只是另一个private与超类中的名称相同的方法.