前面讲到了继承,通过继承,可以让子类拥有父类中已经实现的属性和方法,避免在整个软件体系中,出现重复的代码,提高软件的开发效率和可靠性。
但是有的时候,我们希望父类中的某些属性和方法,仅用于父类自己使用,对子类保密。
并且很多时候,当别的对象调用该类对象的时候,也希望这些调用操作是有限制,类的设计只保持部分方法接口公开。
这就需要在类定义的时候,进行访问控制。
在开始时其实已经说到了,通过将属性设置为private(私有的)的,可以限制对相应属性的访问。
在Java中,可以在类、类的属性以及类的方法前面加上一个修饰符(modifier),来对类进行一些访问上的控制。
比如,我们在前面已经讨论过的,一般情况下将类的属性定义为私有(private)的,而通过公共的(public)方法来对这些属性进行访问。
在这个类程序外的其他程序只能通过公共的方法来访问这个类的属性,这样,实现了信息的隐藏和封装。
但是,有时候我们也需要让其他的程序直接访问类的属性,或者只能让子类访问父类的属性,这个时候就不能用private来限制这些属性了。
在Java中,定义了三个修饰符用来控制类、类的属性以及类的方法等的访问范围。通过这三个修饰符,可以定义四种程度的限制。
下面将对这些修饰符作详细的说明。
private:这是限制最严格的一个修饰符,使用这个关键字来限制的属性或者方法,只能在同一个类中被访问。也就是说,在这个类文件之外,这些属性或方法是被隐藏的。这个修饰符最常用于修饰类中的全局变量。
注意,这个修饰符不能用在类前面。
Default:Default不是关键字,只是对类、类的属性以及类的方法的访问权限的一种称呼。如果在类、类的属性、类的方法前面没有添加任何的修饰符,则我们说它的访问权限是default的。
在这种情况下,只有类本身或者同一个包中的其他类可以访问这些属性或方法,而对于其他包中的类而言是不可访问的。
protected:protected修饰符修饰的属性或方法,可以被同一个类、同一个包中的类以及子类访问。注意,这个修饰符同样不能用于类前面。
public :这个修饰符对类、类的属性以及类的方法均可用。它是限制最宽松的一种限制,使用这个修饰符修饰的类属性、类的方法可以被任何其他的类访问,无论这个类是否在同一个包中,以及是否是子类等。
一般来说,我们应该将和其他类无关的属性或者方法设置为private的,只有需要将它给其他的类访问的属性或方法才将它设置为public或者protected,或者不加任何修饰符,让其为default。
访问控制修饰符的限制程度从高到低为:private Default protected public。
注意:
Default不是Java关键符,它只是表明了一种访问限制状态。