前几天学过方法重写,也就是说,一个类继承至父类,子类可以将父类的方法重写。
但有的时候父类的方法要求固定,不能被更改。
该怎么办?
这就得学到一个新的修饰符了。
一、final修饰符
final,翻译成中文就是“不可更改的 ”。
顾名思义,它是一个修饰符,用于修改不可更改的内容。
被final修饰的类:不能被继承。
被final修饰的方法:不能被重写。
被final修饰的变量:不能被重新赋值。
被final修饰的常量:名称一般都有书写规范,所有字母都大写。多个单词之间,使用下划线进行分割。
1.修饰类和方法
①final修饰类,类不能被继承。
既然不能被继承,那final类里的方法也无法被重写。
②final修饰方法,方法不能被重写。
非final类中,也可以存着final方法。
注:其中final方法是可以被重载的(同名不同参)
2.修饰局部变量
③用final修饰基本数据类型局部变量。
只能赋值一次,不能再更改了,编译会报错。
基本数据类型不能更改的是值。
④用final修饰引用数据类型局部变量。
只能创建对象一次,不能再次创建对象,编译会报错。
引用数据类型不能更改的是对象的地址。
该对象的值是可以通过对应的setXXX()方法更改的。
3.修饰成员变量
成员变量和局部变量有一个区别在于:
成员变量是有默认值的。
所以用final修饰成员变量,它就不再有默认值了,必须一步直接赋值 。
初始化方式有两种,只能二选一:
⑤直接初始化赋值。
⑥构造方法赋值。
注意:用setXXX()方法无法赋值。
二、权限修饰符
public这个关键字太常见了,它就是一个权限修饰符。
在Java语言里面有四种权限修饰符。
其实看字面意思也蛮好理解的:
①public:公共的。
可以修饰类、成员变量、成员方法、构造方法。
被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包。
一般情况下,类的构造方法、成员方法会使用public,方便创建对象和调用方法。
②protected:受保护的。
可以修饰成员变量,成员方法,构造方法,不能修饰类(此处指外部类、内部类不考虑)。
被protected修饰的成员,只能被同包下的其他类访问。
如果不同包下的类要访问被protected修饰的成员,这个类必须是其子类。
③default:默认的。
可以修饰类,成员变量,成员方法,构造方法。
若是没有加权限修饰符,其访问能力就是default权限。
被默认权限修饰后,其只能被本类以及同包下的其他类访问。不同包的子类都不行。
④private:私有的。
可以修饰成员变量,成员方法,构造方法,不能修饰类(此处指的是外部类,内部类不加以考虑)。
被private修饰的成员只能在其修饰的本类中访问,在其他类中不能调用,但是被private修饰的成员可以通过set和get方法向外界提供访问方式 。
private类型的方法都默认为是final方法,因而也不能被子类重写
权限是从大到小的:
public > protect >default>private
三、abstract和static修饰符
修饰符除了权限修饰符和final修饰符,常见的还有abstract和static修饰符。
这两个关键字前面都学过,做一个回顾:
1.abstact修饰类
表明这是一个抽象类。
抽象类不能创建对象生成实例,需要使用子类实例化
2.abstact修饰方法
表明这是一个抽象方法,只有方法名,没有方法体。
需要子类重写。
3.static修饰方法
静态方法只能访问静态变量。
静态方法可以用类名直接调用。
4.static修饰变量
也可称为类变量,局部变量不能被static修饰。
也可以用类名直接调用。
5.static修饰代码块
随着类的加载而加载一次,相当于初始化赋值。