在学习Java基础时会时不时用到一些修饰符,这些修饰符修饰的内容不一样,作用域也不一样,只有梳理清楚才能正确的使用它们。
不同修饰符修饰内容的作用域
public
public公共的,表示该属性(或方法)公开,所有用户都可以直接进行调用。
default缺省
default表示默认,不仅本类访问,而且是同包可见。
private
private私有的,表示该属性(方法)为只有本类内部可以访问(类内部可见)。(想用private还要用set和get方法供其他方法调用,这样可以保证对属性的访问方式统一,并且便于维护访问权限以及属性数据合法性)。
如果没有特殊情况,属性一定私有,方法该公开的公开。
如果不指明谁调用方法,则默认为this。区分实例变量和局部变量时一定要写this。
protected
protected受保护的,对于子类和同包下的类可见,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。
列表对比如下:
常用修饰符修饰内容的作用域
修饰符 | 本类 | 同一包下(有无关系均可) | 子类 | 其他包 |
public | ✔ | ✔ | ✔ | ✔ |
protected | ✔ | ✔ | ✔ |
|
缺省(default) | ✔ | ✔ |
|
|
private | ✔ |
|
|
|
不同修饰符可以修饰的内容
public、private、protected和缺省default
以上几个都可以用来修饰成员变量、成员方法和构造方法,只是有些常见,有些不常见,使用场合约定俗成。除此之外,public还可以用来修饰类本身。
下面针对一些特殊的修饰符来进行介绍。
abstract
abstract抽象的,可以修饰类、方法。
抽象类:
abstract修饰的类称为抽象类,此类不能被实例化,必须被继承使用,如果一个类继承抽象类,那么这个类要么本身也是抽象类,要么这个类重写父类的所有抽象方法。
abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。
抽象方法:
方法没有方法体,且用abstract修饰。有抽象方法的类一定是抽象类(或者接口);抽象类中不一定有抽象方法。
注意:不能与final,private和static共存。
static
static静态的,是一个修饰符,用于修饰成员(包括成员变量和成员方法)。修饰的成员被所有的对象所共享。
被修饰后的成员具备以下特点:
①随着类的加载而加载。
②优先于对象存在。
③被所有对象所共享。
④可以直接被类名调用。
static修饰变量的使用可参考一下《Java基础——成员变量、局部变量和静态变量的区别》
final
final最终的,它可以修饰类,修饰成员变量,修饰成员方法。
它修饰的类,不能被继承。
它修饰的成员方法,是不可以被子类重写的。
它修饰的成员变量,其实是一个常量。
关于abstract和final的有关用法,可以参考另一篇博文《Java基础——抽象类和接口的关系》
列表对比如下:
常用修饰符的修饰内容
修饰符\元素 | 类本身 | 成员变量 | 成员方法 | 构造方法 |
public | ✔ | ✔ | ✔ | ✔ |
缺省 | ✔ | ✔ | ✔ | ✔ |
private |
| ✔ | ✔ | ✔ |
protected |
| ✔ | ✔ | ✔ |
abstract | ✔ |
| ✔ |
|
static |
| ✔ | ✔ |
|
final | ✔ | ✔ | ✔ |
|
分析以后可以看出同一内容可以由不同的修饰符来修饰,有必要找出常见的规则,如下:
所有的类都用public修饰,并且,在一个Java文件下,我们只写一个类。
所有的成员变量用private修饰。
所有的成员方法用public修饰,
如果是在抽象类或者接口中用 public abstract修饰。
所有的构造方法用public修饰,
如果类是工具类或者单例类,则构造用private修饰。
小结
修饰符虽然多,但是基本上各司其职,会有协同的时候,同样也会有拮抗作用。在进行不同操作的时候,使用不同的修饰符,程序才能高效有序无误的运行。