作为public的类和属性是可以被外界任意调用的,无论是在类中,还是跨越类的访问(如果不属于同一个包,就要调用import语句,添加包名),这一点是非常好理解的。
Private的属性和方法是最自私的,它定义的属性和方法只能在本类中使用,到类外,是无论如何都不能被使用的,如:
class Date
{
private int day;
public void tomorrow()
{
this.day = this.day 1;
}
}
public class DateUser
{
public static void main(String args[])
{
Date mydate = new Date();
mydate.day = 21; //注意这句话是错的
}
}
在这个程序中,创建了一个Date类的对象mydate,这是可以的,但是由于类Date中的day是私有变量,所以,创建的这个对象mydate不能通过mydate.day来访问这个属性,如果在其它类中要使用这个私有变量,那么只能通过Date中的public的方法来访问这个属性,这样,就很好的保证了数据的封装性,就像面向对象中提到的报刊亭的故事一样,购买报刊的人不能自己伸手进去拿报纸或是找零钱,而只能由报刊亭内部人员来处理这些事情一样。在上面的例子中,大家可以发现,类Date中的默认方法(Date())并没有定义它的类型,这就意味着它是友好的,也就是意味着它在本包内是public的,而在外包内是private的。但是一旦把它的类型定义为private,那么连Date mydate = new Date()也会出错,这是因为默认的构建器已经被定义为private类型,也就是即使是本包内的其他类也不能访问了。