返回信息流```java
public class Employee implements Comparable<Employee>
{
private String name;
private double salary;
public Employee(String n, double s)
{
name = n;
salary = s;
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public int compareTo(Employee other)
{
return Double.compare(salary, other.salary);
}
}
```
为什么在`compareTo`中,可以直接使用`other.salary`?试了一下可以正确编译、运行。
------------------------------------------------------------------------------------------
感谢各位大神的解答,正解是private 是针对类的,不是针对对象的。
我一开始会产生这个疑问是觉得这样子好像破坏了封装性,一个员工居然可以任意访问和修改另一个员工的工资。我在[stackoverflow上也发现有人和我有相同的疑问](https://stackoverflow.com/questions/312168/java-private-field-visibility),看了里面的一些解答,才发现自己的想法是很奇怪的。这些代码都是在你自己设计的类里面的,你知道自己要做的是什么,所以你要自己控制不写出可以任意修改其他员工工资的代码。
这是一条镜像帖。来源:北邮人论坛 / java / #57455同步于 2017/9/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【问题】【已解决】为什么可以访问私有成员?
shinian
2017/9/12镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 shinian 的大作中提到: 】
: [md]
: ```java
: public class Employee implements Comparable<Employee>
: ...................
java 的 private 跟其他语言的 private 不太一样
The private modifier specifies that the member can only be accessed in its own class
正解~
但有一个问题,例如下面的代码
class Outer {
private static class StaticInner {
private int j;
}
void f() {
StaticInner inner = new StaticInner();
inner.j = 6;//编译通过
}
}
为什么在StaticInner类的外部可以访问到j呢?这是静态内部类特有的性质么
【 在 mrcuber 的大作中提到: 】
: private属性不能从类外部访问。。。类外部。。。类外。不是对象外
Java就是这样设计的,内部类被视为外部类的成员,
外部类拥有其内部成员的所有访问权,内部类的变量及方法也不例外,即使它们是private的
而和内部类是否是静态的无关
【 在 liuyehcf 的大作中提到: 】
: 正解~
: 但有一个问题,例如下面的代码
: [code=java]
: ...................
666
【 在 liuyehcf 的大作中提到: 】
: 正解~
: 但有一个问题,例如下面的代码
: [code=java]
: ...................
谢谢~
【 在 dss886 的大作中提到: 】
: Java就是这样设计的,内部类被视为外部类的成员,
: 外部类拥有其内部成员的所有访问权,内部类的变量及方法也不例外,即使它们是private的
: 而和内部类是否是静态的无关
: ...................
“针对类的,不是针对对象的”
其实还是不对,3楼才是正解。关键是访问发生的“位置”,在类的外部就不能访问,在类的内部就可以访问。不理解的话写个private static变量试试