final
final 关键字代表最终、不可改变的
常见的四种方法:
- 可以用来修饰类
- 可以用来修饰一个方法
- 可以用来修饰一个局部变量
- 可以用来修饰一个成员变量
当final关键字修饰类的时候,格式:
public final class 类名称{
// ...
}
含义:当前这个类不能有任何子类。
注意:一个类如果是final类,那么其中的所有成员方法都无法进行覆盖重写
当final关键字用来修饰一个方法的时候,这个方法就是最终方法,不能被覆盖重写
格式:
修饰符 final 返回值类型 方法名称(参数列表) {
// 方法体
}
注意事项:
对于类、方法来说,abstract关键字和final关键字不能同时使用。因为矛盾
// 父类
public abstract class Fu {
public final void method() {
System.out.println("父类方法执行");
}
// abstract和final矛盾
public abstract /*final */void methodAbs();
}
// 子类
public class Zi extends Fu {
@Override
public void methodAbs() {
}
// method使用了final,不能被覆盖重写
/*@Override
public void method() {
super.method();
}*/
}
对于成员变量,如果使用final关键字修饰,那么这个变量也照样是不可变的
1.由于成员变量具有默认值,所以用来final之后必须手动赋值,不会再给默认值了
2.对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值
3.必须保证类当中所有的重载的构造方法,都最终会对final的成员变量进行赋值
public class Person {
private final String name;
public Person() {
name = "张三";
}
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
// 因为使用了final关键字,name不可改变
// public void setName(String name) {
// this.name = name;
// }
}
权限修饰符
public | protected | (default) | private | |
---|---|---|---|---|
同一个类 | yes | yes | yes | yes |
同一个包 | yes | yes | yes | no |
不同包子类 | yes | yes | no | no |
不同包非子类 | yes | no | no | no |