上一篇我们学习了Java的继承,我们知道子类可以无条件地使用父类的成员(即属性和方法),也就是说儿子可以随便拿父亲的财产,那如果父亲想要存一点私房钱怎么办呢?可以通过修饰符来实现。
访问修饰符有四个:public
、protected
、default
和private
,依次翻译为公共的、受保护的、默认、私人的。修饰符放在类、方法、变量、属性的前面,用来定义被修饰的类、方法、变量、属性的访问权限。
默认访问修饰符,即default不需要写出来,如果没有修饰符,则系统自动视为default修饰符。
我们可以通过以下表来说明访问权限:
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|---|
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
不难看出,以上表格从上到下是逐渐变严格的访问控制,常用的一般是public和private修饰符,这两个也非常容易记忆。public是无论在哪都可以拿我的东西,private则是只有我自己可以拿我自己的东西,使用private修饰符就可以解决引言中私房钱的问题了。另外,protected可以理解成是家族的传家宝,整个家族的人都可以拿,是整个家族共享的;而default默认访问权限则可以理解成一个家庭(比家族小)的财物,就只有一家三口(三口即为"当前类"、"同一包内"和"同一包的子孙类")可以访问,可以使用。
方法继承的规则:
static
修饰符static属于非访问控制修饰符,中文名为静态修饰符,可以用于修饰变量和方法。
静态变量:
static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
通过以下例子更直观地了解一下静态变量。
xxxxxxxxxx
class father{
//对照实验。一个有static修饰,另一个没有
public static int myAge=0;
public int yourAge=0;
}
public class Test{
public static void main(String args[]){
//创建两个father类的实例(对象)
father name1=new father();
fahter name2=new father();
name1.myAge=1;
name1.yourAge=1;
System.out.println(name2.myAge);
System.out.println(name2.yourAge);
}
}
运行结果如下:
可见static变量可以理解为共有的变量,我修改了我的,相当于也修改了你的;也可以理解为是真正属于类的变量,即只要是这个类的实例(对象),那么用的就是同一个变量,而非static的变量则只是属于某一个对象自己的,改变我自己的并不会影响你的。
静态方法:
static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。