Java修饰符

上一篇我们学习了Java的继承,我们知道子类可以无条件地使用父类的成员(即属性和方法),也就是说儿子可以随便拿父亲的财产,那如果父亲想要存一点私房钱怎么办呢?可以通过修饰符来实现。

 

访问修饰符

访问修饰符有四个:publicprotecteddefaultprivate,依次翻译为公共的、受保护的、默认、私人的。修饰符放在类、方法、变量、属性的前面,用来定义被修饰的类、方法、变量、属性的访问权限。

默认访问修饰符,即default不需要写出来,如果没有修饰符,则系统自动视为default修饰符。

我们可以通过以下表来说明访问权限:

修饰符当前类同一包内子孙类(同一包)子孙类(不同包)其他包
publicYYYYY
protectedYYYYN
defaultYYYNN
privateYNNNN

不难看出,以上表格从上到下是逐渐变严格的访问控制,常用的一般是public和private修饰符,这两个也非常容易记忆。public是无论在哪都可以拿我的东西,private则是只有我自己可以拿我自己的东西,使用private修饰符就可以解决引言中私房钱的问题了。另外,protected可以理解成是家族的传家宝,整个家族的人都可以拿,是整个家族共享的;而default默认访问权限则可以理解成一个家庭(比家族小)的财物,就只有一家三口(三口即为"当前类"、"同一包内"和"同一包的子孙类")可以访问,可以使用。

 

访问控制和继承

方法继承的规则:

 

static修饰符

static属于非访问控制修饰符,中文名为静态修饰符,可以用于修饰变量和方法。

静态变量:

static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。

通过以下例子更直观地了解一下静态变量。

运行结果如下:

1543456874494

可见static变量可以理解为共有的变量,我修改了我的,相当于也修改了你的;也可以理解为是真正属于类的变量,即只要是这个类的实例(对象),那么用的就是同一个变量,而非static的变量则只是属于某一个对象自己的,改变我自己的并不会影响你的。

 

静态方法:

static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。