在Java中,一个方法可以访问所属类的所有对象的私有数据。
class Employee
{
private String name;
...
public boolean equals(Employee other)
{
return name.equals(other.name);
}
}
典型的调用方式是
if(harry.equals(Tom))...
这个方法访问harry的私有域,这点并不会让人奇怪,然而,它还访问了boss的私有域。这是合法的,其原因是Tom是Employee类对象,而Employee类的方法可以访问Employee类的任何一个对象的私有域。
C++注释:C++也有同样的原则。方法可以访问所属类的私有特性(feature),而不仅限于访问隐式参数的私有特性。
下面是我为了更好的展示这语言特性,编写的一个简单的小程序,源代码如下:
public class EmployeeTest
{
public static void main(String[] args)
{
Employee harry = new Employee("harry");
Employee Tom = new Employee("Tom");
if(harry.equals(Tom))
{
System.out.println("Yes");
}
else
{
System.out.println("No");
}
}
}
class Employee
{
private String name;
public Employee(String name)
{
this.name = name;
}
public boolean equals(Employee other)
{
return name.equals(other.name);
}
}
编译成功,程序能正常运行,见图1。
图1