【问题标题】:Java private modifier confusion [duplicate]Java私有修饰符混淆[重复]
【发布时间】:2015-05-02 03:19:33
【问题描述】:

我写Java已经有几年了,但我仍然不明白为什么下面这个简单的示例类实际上通过了编译。在这种情况下,我会为 myInt 创建一个 getter 方法,并使用该方法从 compareTo 中的 o 获取 myInt 方法,因为 myInt 被声明为 private。有人能告诉我为什么这是访问 omyInt 的合法方式吗?

public class B implements Comparable<B> {

    private int myInt = 0;

    public int compareTo(B o) {
        return myInt-o.myInt;
    }

}

提前致谢!

【问题讨论】:

标签: java accessor private-members


【解决方案1】:

根据Oracle's Java Tutorial

访问级别修饰符确定其他类是否可以使用特定字段或调用特定方法。

访问级别是在类级别设计的,不依赖于实例。

【讨论】:

    【解决方案2】:

    根据 Java API:

    private 修饰符指定该成员只能在其自己的类中访问。

    作为一个类总是可以访问它自己的成员。你的代码是允许的,它不会给你的编译错误。

    看看这个(把B改成C):

    class B implements Comparable<B> {
    
        private int myInt = 0;
    
        public int compareTo(C o) {
            return myInt-o.myInt;
        }
    
    }
    
    class C
    {
        private int myInt = 0;
    }
    

    如果您尝试将B 更改为C(另一个类)。它会给你编译错误。

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 2021-08-25
      • 1970-01-01
      • 2016-01-28
      • 2011-07-25
      • 2013-12-22
      • 1970-01-01
      • 2015-11-26
      相关资源
      最近更新 更多