java修饰符
一、访问修饰符
1.1 private访问控制符
当前类访问权限
如果一个成员方法或成员变量名前 使用了 private 访问控制符,那么这个成员只能在这个类的内部使用。
1.2 default 访问控制符
包访问权限(默认)
default访问控制的成员或外部类可以被相同包下的其他类访问;default不能修饰变量。
1.3 protected 访问控制符
子类访问权限
基类的 protected 成员是包内可见的,并且对子类可见;
若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。
1.4 public 访问控制符
公共访问权限
可以 被所有的类访问,不管访问类与被访问类是否在同一个包中。
二、非访问修饰符
2.1 static修饰符
用来修饰类方法和类变量。static的真正作用就是用于区分Field、方法、内部类、初始化块这四种成员到底属于类本身还是属于实例。
2.1.1特点
- static修饰的变量属于类变量,多个对象共享同一个static变量;
- static修饰的方法属于静态方法,静态方法不能重写(不属于某个对象),不能使用this关键字(无法指向合适的对象);
- 可以直接通过“类名 . 属性/方法”的方式访问静态属性和静态方法,不需要创建类的对象;
- 静态成员不能直接访问非静态成员。静态成员属于类,不需要生成对象就存在了,而非静态需要生成对象才产生. 所以静态成员不能直接访问
2.2 final修饰符
意思是最终的、不可修改的,最见不得变化,用来修饰类、方法和变量
2.2.1特点
- final修饰的类不能被继承,final类中的所有成员方法都会被隐式地指定为final方法;
- final修饰的方法不能被重写;
- final修饰的变量是常量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
2.3 abstract修饰符
abstract 修饰符,用来创建抽象类和抽象方法。
2.3.1特点
- abstract修饰的类是抽象类,抽象类可以继承别的普通类或抽象类,也可以实现接口,但抽象类不可以实例化;
- abstract修饰的方法是抽象方法,抽象方法没有方法体;
- 抽象类不一定有抽象方法,有抽象方法的类必须是抽象类;
三、jdk1.8的接口中default修饰的方法
接口里的变量默认隐含类型是public static final
方法默认类型是public abstract
在1.8中,对已有的接口,如果想对接口增加一个新方法,那么需要对实现该接口的所有类进行修改,如果接口实的现类很多,就会带来
很大的工作量,而且还很容易破坏以前的代码,带来一些问题。如果把新的方法定义为default方法,就可以避免对其他实现类的修改。
新增了default方法,如果方法前面加上该修饰符,则实现类并不是必须实现该方法。并且在接口中,还可以直接编写该方法的方法体。
当然子类也可以重写该方法。
注意:
-
当多个接口中有同一个用default修饰的方法时,就无法判断到底实现的是哪个接口的方法。这种情况下,就必须重写方法。
-
一个类继承的父类和实现的接口中都有同一个方法,而这个类又没有重写时,实现的是父类的方法,而不是接口中的方法。