Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';Java中受保护字段的意义是什么,因为它打破了数据封装原则?_Java_Oop_Protected - Fatal编程技术网

什么';Java中受保护字段的意义是什么,因为它打破了数据封装原则?

什么';Java中受保护字段的意义是什么,因为它打破了数据封装原则?,java,oop,protected,Java,Oop,Protected,以下是“核心Java”中引用的句子: 假设您的类被其他程序员使用,并且您使用受保护的字段设计它。您不知道,其他程序员可能会从您的类继承类,并开始访问您的受保护字段。在这种情况下,您不能再更改类的实现而不打乱那些程序员。这与OOP的精神背道而驰,OOP鼓励数据封装 因此,我想知道Java中受保护字段的意义是什么?如果超级类和子类不是由同一个开发人员(或同一个组织)维护的,则不建议这样做。然而,如果超类和子类是紧密耦合的代码,这是一种有用的技术。例如,同一库的组件 作为类比,在商业世界中,每一笔交易

以下是“核心Java”中引用的句子:

假设您的类被其他程序员使用,并且您使用受保护的字段设计它。您不知道,其他程序员可能会从您的类继承类,并开始访问您的受保护字段。在这种情况下,您不能再更改类的实现而不打乱那些程序员。这与OOP的精神背道而驰,OOP鼓励数据封装


因此,我想知道Java中受保护字段的意义是什么?

如果超级类和子类不是由同一个开发人员(或同一个组织)维护的,则不建议这样做。然而,如果超类和子类是紧密耦合的代码,这是一种有用的技术。例如,同一库的组件

作为类比,在商业世界中,每一笔交易都应该受到一些法律合同的保护,有人会说,在没有法律合同保护的情况下进行交易是“不受鼓励的”。如果双方是不同的商业实体,这将是事实。然而,当当事人不是商业实体而是同一家族的成员时,显然不能适用同样的原则


OOP是关于代码的组织。在不同的情况下,需要不同的组织原则。

我认为它在抽象类中更有用。例如,我最近为一个视频游戏编写了一个抽象类,其中有一个旋转场(角度)。抽象类不太关心如何计算角度,具体类将负责根据需要设置角度。抽象类使用它,具体类设置它


实现这一点还有其他方法。另一个变体是让具体类实现一个名为getAngle的方法,抽象类在需要旋转值时会调用该方法,但我并不是为了性能而这样做的。

你不应该把第三方书籍当作圣经来对待。你的话在某种意义上对我来说是有意义的。但我认为,即使一系列类是由同一个人(或同一组织)维护的,滥用“受保护”作为访问便利可能不是一个好的做法。因为直接访问受保护字段的类与超级类的实现高度耦合。一旦决定更改超类,如果不使用受保护的字段,就可以节省大量时间,而不必相应地更改依赖类。是的,OOP更多的是关于代码,而不是关于代码创建者。