Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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 - Fatal编程技术网

Java 如果类方法/字段仅由类本身访问,那么它们的封装是否重要?

Java 如果类方法/字段仅由类本身访问,那么它们的封装是否重要?,java,Java,简短的背景:我用java制作了一个俄罗斯方块克隆(所有的游戏数据和方法都是一个类),我担心在这种情况下封装是否重要 几乎所有字段和方法都标记为“default”,没有任何getter和setter,因为用户不应该访问它们 方法在不传递任何参数的情况下直接操作变量,当然只有当它所操作的对象是唯一的时(不能有两个当前块、两个下一个块列表、两个保持块等等) 如果用户永远不应该获得类的原始成员,那么我真的需要getter和setter吗?方法直接获取并设置值。如果我有一个简单的int,我想得到或设置,我

简短的背景:我用java制作了一个俄罗斯方块克隆(所有的游戏数据和方法都是一个类),我担心在这种情况下封装是否重要

几乎所有字段和方法都标记为“default”,没有任何getter和setter,因为用户不应该访问它们

方法在不传递任何参数的情况下直接操作变量,当然只有当它所操作的对象是唯一的时(不能有两个当前块、两个下一个块列表、两个保持块等等)

  • 如果用户永远不应该获得类的原始成员,那么我真的需要getter和setter吗?方法直接获取并设置值。如果我有一个简单的int,我想得到或设置,我只是直接做它

  • 没有返回值,如果每次都发生一件确切的事情。例如:如果在繁殖过程中发生冲突,则会立即触发gameOver(),而不是返回false,然后在函数外部执行。我选择不使用返回值,因为在函数内部执行返回值要简单得多,而不是在每个函数调用周围使用if语句执行相同的操作

  • 我是否需要修复其中一些问题?我应该如何修复这些问题,以保持可读性和性能的稳定性?

    事实并非如此

    为什么??我们的理解是,类的字段和方法正朝着一个共同的目标协同工作。所以他们不是敌人或粗心的演员,你必须保护自己不受伤害

    只有为了防止外部参与者弄乱类不变量,您才尽可能多地隐藏字段和方法,只公开必要的内容


    如果必须使用setter和getter在类内的代码中强制执行规程,那么要处理的问题比维护适当的封装(和其他OO原则)要大得多。

    不,如果不打算从类外部访问成员变量,则不需要getter和setter

    在您的情况下,由于成员变量只能从类本身内部访问,因此访问修饰符应更改为
    private

    使用
    default
    关键字意味着您不想提供访问修饰符,该变量应可用于同一包中的任何其他类


    可以找到更多信息

    感谢您指出这一点。我误解了子类不能继承私有成员,所以我将它们保留为默认值。如果您希望子类能够访问超类的成员变量,那么您可以使用
    受保护的
    访问修饰符。对不起,我的意思是,如果我有嵌套类,
    private
    。对于子类,
    受保护
    。这是正确的吗?