Oop 继承如何将父实现公开给子类?

Oop 继承如何将父实现公开给子类?,oop,encapsulation,Oop,Encapsulation,刚刚阅读了GoF,他们的状态继承将子类暴露于其父类实现的细节中。如果父类使用私有成员变量和受保护的函数,我看不出实现是如何公开的?这是一个错误的答案,但无论如何,还是这样 当您继承一个类时,Intellisense或代码完成将让您知道哪些函数和变量是公共的和受保护的,您可以访问或重写它们。这部分回答了继承如何将父实现公开给子类的问题?因为您需要知道可以访问或操作哪些函数和变量 如果没有编写父类,则需要查阅一些文档,这些文档将告诉您可以重写哪些函数,以及在父类实现中调用该函数的时间和位置。此信息让

刚刚阅读了GoF,他们的状态继承将子类暴露于其父类实现的细节中。如果父类使用私有成员变量和受保护的函数,我看不出实现是如何公开的?

这是一个错误的答案,但无论如何,还是这样

当您继承一个类时,Intellisense或代码完成将让您知道哪些函数和变量是公共的和受保护的,您可以访问或重写它们。这部分回答了继承如何将父实现公开给子类的问题?因为您需要知道可以访问或操作哪些函数和变量

如果没有编写父类,则需要查阅一些文档,这些文档将告诉您可以重写哪些函数,以及在父类实现中调用该函数的时间和位置。此信息让您知道父类是如何实现的


如果您自己编写父类,那么您已经知道它的行为。当您创建子类时,您已经知道父类是如何工作的,因此您知道要访问或重写哪些变量和函数。

这是一个错误的答案,但不管怎样,还是这样

当您继承一个类时,Intellisense或代码完成将让您知道哪些函数和变量是公共的和受保护的,您可以访问或重写它们。这部分回答了继承如何将父实现公开给子类的问题?因为您需要知道可以访问或操作哪些函数和变量

如果没有编写父类,则需要查阅一些文档,这些文档将告诉您可以重写哪些函数,以及在父类实现中调用该函数的时间和位置。此信息让您知道父类是如何实现的


如果您自己编写父类,那么您已经知道它的行为。创建子类时,您已经考虑到父类的工作方式,因此您知道要访问或重写哪些变量和函数。

我认为它们是指受保护的函数/成员。您应该只使用公共函数,以便对受保护的函数不可知。这些函数公开了实现的细节-因为如果它们没有,它们将是功能性的,因此是公共的。嗨,Chip,你能重写一下吗?如果你的子类使用的不是父类的公共成员的东西,你通常会是,或者你为什么要继承?,那么您在某种程度上取决于父级实现的详细信息。@jjlin,1因此,如果我的父级中有一个名为myvar的私有int属性和一个名为void setmyvarint val的受保护函数,那么如果我的子类名为setmyvar5,这会破坏封装,因为该子类正在通过myvar修改父级的状态?2我认为抽象类之所以避免这种情况,是因为它们的行为类似于接口?[继续前面的注释,因为5分钟后显然无法编辑注释。]我的原始观点是,子类通常必须了解其父类在内部的工作方式,但是,设计一个父级的方式,使其最小化,这当然是可能的。2个抽象类也可以有实现,所以它们不是最纯粹意义上的接口。我认为它们是指受保护的函数/成员。您应该只使用公共函数,以便对受保护的函数不可知。这些函数公开了实现的细节-因为如果它们没有,它们将是功能性的,因此是公共的。嗨,Chip,你能重写一下吗?如果你的子类使用的不是父类的公共成员的东西,你通常会是,或者你为什么要继承?,那么您在某种程度上取决于父级实现的详细信息。@jjlin,1因此,如果我的父级中有一个名为myvar的私有int属性和一个名为void setmyvarint val的受保护函数,那么如果我的子类名为setmyvar5,这会破坏封装,因为该子类正在通过myvar修改父级的状态?2我认为抽象类之所以避免这种情况,是因为它们的行为类似于接口?[继续前面的注释,因为5分钟后显然无法编辑注释。]我的原始观点是,子类通常必须了解其父类在内部的工作方式,但是,设计一个父级的方式,使其最小化,这当然是可能的。2抽象类也可以有实现,因此它们与最纯粹意义上的接口并不完全相同。