c# - 在 C# 或 Java 中子类化时是否可以覆盖私有(private)成员?

标签 c# java oop inheritance

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

是否可以覆盖父类(super class)(基类)中的私有(private)成员?在我看来,这是不正确的,因为访问修饰符会阻止成员被访问。

最佳答案

这不是一个愚蠢的问题,但它给出了隐藏变量的另一个概念。

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

在方法的情况下,只有那些继承的方法被覆盖,因此静态方法也不会被覆盖,而只是隐藏,并且它们仅遵循静态绑定(bind)。私有(private)成员(方法或字段)既不隐藏也不覆盖。它们也遵循静态绑定(bind),并且除了拥有它们的类之外,不能从任何其他类(包括子类)直接访问它们。请记住,Hidden 在这里并不意味着我们无法访问子类中的成员。因此,不要将不可访问(对于私有(private)成员 - 字段或方法)和隐藏相混淆。

关于c# - 在 C# 或 Java 中子类化时是否可以覆盖私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8210846/

相关文章:

c++ - 为什么要使用 "using"关键字来访问我的基类方法?

python - 将整洁的架构与 ORM 集成

c# - Azure 移动服务 .Net 后端调度程序错误

c# - 在枚举中使用字符串

c# - Windows 移动精简框架 SqlCeConnection

java - Eclipse 3.7 和 Eclipse 4.1 有什么区别?

java - 基本 Java 对象类将对象返回为 null?

c# - 如何删除作为附件的图像但显示在电子邮件正文中

java - 如何在 Java 中交换字符串的第一个和最后一个字符?

java - 计算来 self 的应用程序的服务器调用