【问题标题】:Why is private member of a class accessible in compareTo? [duplicate]为什么在 compareTo 中可以访问类的私有成员? [复制]
【发布时间】:2014-04-02 11:02:16
【问题描述】:

我编写了以下类来摆弄 Comparable/Serializable 接口。

package testpro;

public class SerialTest implements Comparable {
    private int circleSize = 10;

    private int getCircleSize() {
    return circleSize;
    }

    @Override
    public int compareTo(Object o) {
    SerialTest object = (SerialTest) o;
    if(getCircleSize()>object.getCircleSize()){ // I can access object.getCircleSize() here, but it's private.. why?
        return 1;
    }
    else if(getCircleSize()<object.getCircleSize()){// I can access object.getCircleSize() here, but it's private.. why?
        return -1;
    }
    else{
        return 0;
    }
    }
}

我将 Object o 传递给 compareTo() 方法,但 getCircleSize() 是私有的。那怎么可能,我可以访问这个? 我很确定 C++ 不会放过它。

【问题讨论】:

  • 这个问题有很多重复 - 我现在只是想找到一个好的
  • 另外:stackoverflow.com/questions/4707504/…(这说明了这一点,如果可见性由对象实例确定,静态方法如何访问私有成员?)跨度>

标签: java private


【解决方案1】:

Private 意味着只能从同一个类访问。在将Object o 转换为SerialTest object 之后,您同一个班级。

【讨论】:

    【解决方案2】:

    私有方法可以在类本身中访问。由于这两种方法都驻留在同一个类中,所以访问它没有问题。

    private 修饰符指定该成员只能在 它自己的类。

    查看here了解更多详情

    【讨论】:

      【解决方案3】:

      您可以访问同一班级的私人成员。您覆盖方法 compareTo() 并在其中访问您的私人成员。

      如果没有其他类的访问器,您不能对私有成员执行此操作。

      你可以从这个link学到这一点。

      【讨论】:

        【解决方案4】:

        private 不能被其他类访问。但是在类中,它可以用于编程。例如您的代码,您可以在生成结果时使用类中的所有私有标识符或方法。

        C++ 也提供了这个功能。您可以轻松地在类或方法中使用私有方法来生成函数调用的响应。简单又合法!

        【讨论】:

          猜你喜欢
          • 2014-03-13
          • 2014-05-30
          • 2013-11-13
          • 2011-02-06
          • 2021-06-29
          • 2012-07-23
          • 1970-01-01
          • 2019-05-12
          • 2021-06-21
          相关资源
          最近更新 更多