(一)成员变量和方法的访问权限
1、private修饰词,表示成员是私有的,只有自身可以访问;
2、protected,表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员;
3、无修饰词(默认),表示包访问权限,同一个包内可以访问,访问权限是包级访问权限;
4、public修饰词,表示成员是公开的,所有其他类都可以访问。
对于protected修饰词,值得我们注意的是:
在不同包的情况下,protected属性只对其子类开发访问权限;
在不同包的情况下,即使其父类对象也无法直接访问自身的protected属性。
下面我们写一个例子来说明protected的访问权限
package package1;
/*
* 目标类
* 定义一个protected的属性
*/
public class BaseClass {
protected String protectedContent="this is protected content";
}
package package2;
import package1.BaseClass;
public class Test extends BaseClass{
private void test(){
//非同包情况下,子类对象也可以访问父类对象(目标对象)的protected属性
System.out.println(protectedContent);
System.out.println(this.protectedContent);
System.out.println(super.protectedContent);
}
public static void main(String[] args) {
//非同包情况下,目标类只对其子类开放protected属性的访问权限
Test test=new Test();
System.out.println(test.protectedContent);
//非同包情况下,即使通过父类对象(目标对象)也无法直接访问目标对象的protected属性
BaseClass baseClass=new BaseClass();
//下面这句会提示错误 “The field BaseClass.protectedContent is not visible”
System.out.println(baseClass.protectedContent);
}
}
(二)类的访问限制,仅有public和包访问权限
1、一个Java文件只能有一个public类
2、public类的名称必须同Java文件名完全一致
3、若Java文件中没有public类,则文件名可以任意
4、若类无修饰词则默认为包访问权限
5、对于内部类,可以用private,public,protected修饰(此时内部类相当于一个成员变量)
final关键字
1、final数据成员,使用前总是被初始化并被强制要求在定义处或构造器中赋值;一旦赋值后,对于基本类型其值会恒定不变,而对于对象引用会始终指向赋值的对象,但指向对象自身是可以修改的;
2、final参数,对于基本类型表示无法改变参数的值,对于对象引用表示无法改变引用所指的对象;
3、final方法,保证方法不会在继承后修改和重载;
4、final类,表示该类不可被继承。
static关键字
1、static修饰的静态变量
声明为static的变量实质上就是全局变量,在JVM加载类的时候就会为该类的静态变量开辟一个内存空间来存放类的静态变量,该类所实例化的所有对象都共享这个静态变量。
2、static修饰的静态方法
静态方法在JVM加载并初始化类的时候就会执行,声明为static的方法有以下几条限制:
· 它们仅能调用其他的static 方法。
· 它们只能访问static数据。
· 它们不能以任何方式引用this 或super。
3、静态类
通常一个普通类不允许声明为静态的,只有一个内部类才可以使用static关键字修饰。