OOP和私有领域的继承

xde*_*000 5 c# c++ java oop

在C#中,规范说:

实例构造函数,析构函数和静态构造函数不是继承的,但所有其他成员都是,无论它们声明的可访问性如何(第3.5节).但是,根据其声明的可访问性,可能无法在派生类中访问继承的成员.

所以私有字段继承到派生类,但它们不可访问.

但Java规范说:

只有声明为protected或public的类的成员才会被声明在声明类之外的包中声明的子类继承.

所以私有字段不会继承到派生类中.

什么能解释OOP理论?是正确的C#还是Java设计师?

在这方面有点困惑.

PS我没有C++经验?C++设计师对此有何看法?

Him*_*ere 1

至少回答 C#/Java 部分,因为我对 C++ 不太了解。

\n\n
\n

但是,根据其声明的可访问性,继承的成员可能无法在派生类中访问。

\n
\n\n

尽管 Java 以相同的方式处理私有成员,但 C# 规范似乎更有意义。Java 中也存在基类的私有成员(但是它们不是继承的,请参阅Java 中私有字段是否继承?)。由于您无法访问它们,所以无论如何这都是没有用的。然而,内部结构当然也是通过设置私有成员来初始化的。因此,派生类的实例当然拥有基类的所有私有成员,但是继承意味着任何类型的多态性,这意味着您可能能够覆盖(假设您的成员不是staticfinal/selead)它们,这对私有成员没有意义。

\n\n

因此,无论是在 C#、Java 还是其他任何地方,根本不需要访问内部结构。简单地假设您的派生实例已完全初始化所有基本成员并完成您的实际工作。

\n\n

关于你所说的“OOP理论”,我怀疑对于这个原则(在上述语言中以不同的方式实现)是否有一个更清晰的答案,私有成员根本没有相关性。OOP 仅处理对象与其周围环境之间的交互,而不是其实际内部。

\n