【问题标题】:How public members of a class causes havoc in java?类的公共成员如何在 Java 中造成严重破坏?
【发布时间】:2013-08-26 22:59:03
【问题描述】:

类的公共成员如何在 java 中造成严重破坏?有人可以举例说明吗?我试图创造这样的情况,但未能成功。我只是发现它们等同于“受保护”访问修饰符。

【问题讨论】:

标签: java class public


【解决方案1】:

我相信这完全取决于您设计的应用程序/程序。

将成员声明为私有肯定有好处。

But on the other hand,

如果你设计一个点类,用户将继承它 并用它画出各种形状,正方形,长方形,圆形,你 可能会考虑将成员 x、y、z 保持为公开状态。

示例:

class Point{

    public double x = 0.0;
    public double y = 0.0;
    public double z = 0.0;

}

这里的优势是; Rectangle、Square 类可以直接访问点

说;

class Square extends Point{

    private Point p;

    p.x = 4.0;
    p.y = 10.0;
    p.z = 0;

    // Instead of using double x = p.getX(); double p.setX(5.0);
}

希望这会有所帮助。

阅读以下文章;它应该对你有帮助。

  1. Source 1
  2. Source 2
  3. Source 3

【讨论】:

    【解决方案2】:

    它允许无效值,破坏封装。

    public class Clock {
        public int hours;
        public int minutes;
    }
    

    然后,在不相关的代码中......

    Clock clock = new Clock();
    clock.hours = 42;
    clock.minutes = 99;
    

    使用 setter 和 getter 方法将它们私有化允许封装强制执行正确的值。

    public class Clock {
        private int hours;
        private int minutes;
        public void setHours(int hours) {
            if (hours < 0 || hours > 23) throw new IllegalArgumentException("bad range");
            this.hours = hours;
        }
        // Likewise for "setMinutes" method.
    }
    

    这是关于封装好处的tutorial page on encapsulation in Java。引用:

    • 类的字段可以设为只读或只写。

    • 类可以完全控制其字段中存储的内容。

    • 类的用户不知道该类如何存储其数据。一种 class 可以更改字段的数据类型,而 class 的用户可以 无需更改任何代码。

    【讨论】:

    • 受保护的访问修饰符不会发生这种情况吗?
    • @dganesh2002 是的,但前提是你非常讨厌自己。受保护的字段不能从包的边界之外访问,这意味着没有外部代理可以篡改您的类的内部齿轮。
    • 只在子类中,已经有责任维护其超类的契约。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多