类或者对象成员可以通过访问说明符设定安全机制,其中成员包括成员变量或成员方法。
其中java支持的四种访问限制:
public——所有类都可以访问
private——只有本类可以访问
protected——子类或者同一包的类可以访问
<省略>——只允许同一包的类可以以访问
下图是访问级别表
所以,同类的两个不同的private成员变量可以进行互访。
public class Student
{
private String name;
private int age;
private String sex;
public boolean compare(Student s)
{
return this.age==s.age;
}
}
我也想问,应该是你说的这种吧
age不是私有的吗,怎么可以直接访问
=============
抄了点,还是不太明白,只明白下面这点。
字段的private修饰符基于类的,类的方法可以访问这个方法的类的任何对象的private字段
4.3.7 Class-Based Access Privileges
You know that a method can access the private data of the object on which it is invoked. What many people find surprising is that a method can access the private data of all objects of its class. For example, consider a method equals that compares two employees.
class Employee
{
. . .
public boolean equals(Employee other)
{
return name.equals(other.name);
}
}
A typical call is
if (harry.equals(boss)) . . .
This method accesses the private fields of harry, which is not surprising. It also accesses the private fields of boss. This is legal because boss is an object of type Employee, and a method of the Employee class is permitted to access the private fields of any object of type Employee.
1、一个类可以创建多个对象。2、每个类的对象都可以来访问、当前类的成员变量。
转自网页链接的回答:
按private的作用级别,OOP语言大体可以分两类:
一类的访问限制级别是'类',同一类的不同对象可以互相访问private成员;
另一类的访问限制级别是'对象',一个对象的private成员只有该对象本身才能访问,其它对象即使同属一类也不行.
前者如C系语言(JAVA,C++,C#),后者如smalltalk.
从某种意义上说,C系语言更像基于类的语言,而smalltalk是纯粹的面向对象的语言.
为什么C系语言要采取这样的方式,而不将面向对象贯彻得更彻底呢?
其实这是基于下面目的的一种折中:
用最简单的方式实现最好的封装.
在编程中,同类对象间访问彼此成员是经常要发生的.比如对象的复制,比较等问题.
如果private进行了'对象'级的限制,我们就不得不用诸如GetXxx()/SetXxx()等public方法对private成员进行操作.
这使得处理过程相当繁琐.
而更重要的是,仅仅为了类内问题,而用public方法处理本不该被暴露在类外的private成员,反而使类封装性遭到了不必要的破坏.
由上,我们看到过分追求对象的保护,反而会降低类的保护强度,这是适得其反的.
造成上述矛盾的根本原因是类保护和对象保护的层次差异.
大多数情况下,比起同类对象间的访问限制,我们更需要保证不同类对象间的访问限制.
我认为原因是这样的,但以上内容只是我个人的思考.