Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节。下面介绍一下几种常见的访问控制修饰符的作用和特点。
public:可以修饰类,数据成员,构造方法,方法成员。
被public修饰的成员,可以在任何一个类中被调用。
protected:被protected修饰的成员,能在定义它们的类中,同包的类中被调用。
如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类。
default:默认访问权限没有任何关键字,包中所有类都可以访问,但是这个包之外的所有类不可以访问。
private:除了本类,其他任何类都无法访问。
public | protected | 默认 | private | |
所有 | √ | | | |
子类 | √ | √ | ||
同包 | √ | √ | √ | |
自身 | √ | √ | √ | √ |
ps:
1.由上图可知,在子类与父类不同包时,若父类的类成员为protected,则可访问并继承,若父类为默认修饰符,则不可访问。
2.protected、private不能直接修饰类
Java中的其他修饰符主要有 static、final、abstract,下面分别介绍其使用方法
static:静态的,可修饰方法,属性,构造块;用static修饰的类成员与类共存,e.g.图形类和它的边
static修饰的成员属于类,因此直接用类名调用即可;
非静态成员可调用静态成员,但静态成员不可调用非静态成员
final:最终的,可修饰类,方法,变量;用final修饰的类不能被继承,方法不能被重写,变量的值不能改变;
e.g.String类是不可被继承的包装类,需用final修饰
abstract:抽象的,可修饰类、方法,抽象类不能创建对象,是为子类服务的;有抽象方法的类一定是抽象类,
因此,当子类继承抽象父类时,要么重写所有抽象方法,要么子类也是抽象类。