Final关键字
final可以修饰类、属性、方法、局部变量。
- 不希望类被继承时使用
- 不希望父类的某个方法被子类覆盖或重写
final的基本操作
public class Final01 {
public static void main(String[] args) {
}
}
final class A {
} // 不允许被继承的类
//class B extends A{}
class C {
public final void hi() {
}
}
class D extends C {
// @Override
// public void hi() {
// super.hi();
// }
//}
}
class E {
public final double PI_NUMBER = 3.14;
}
class F {
public void say() {
final double NUM = 10;
// num = 9; 不能修改被final修饰的属性
System.out.println(NUM);
}
}
final修饰的属性又叫做常量,一般用大写字母下划线连接来命名。
final修饰的属性必须赋初值,并且往后不能在修改。赋值的位置:
- 定义时(public final int A =10)。
- 在构造器中。
- 在代码块中。
public class Final01 {
public static void main(String[] args) {
}
}
class A{
public final double MAX_NUMBER=99;
public final double MAX_NUMBER2;
public final double MAX_NUMBER3;
public A(){
MAX_NUMBER2=99;
}
{
MAX_NUMBER3=99;
}
}
如果类不是final类,方法是final方法则,类可以继承,但是方法不能重写。
public class Final01 {
public static void main(String[] args) {
C c = new C();
c.say();
//方法不是不能重写
}
}
class B {
public final void say() {
System.out.println("这是say方法");
}
}
class C extends B{ }
如果一个类是final类其中的方法就不用加final了。final不能修饰构造方法。final和方法一起用效率高。
public class Final01 {
public static void main(String[] args) {
System.out.println(A.num);
}
}
class A{
public static final int num=11;
static {
System.out.println("A类的静态代码块");
}
}
包装类:Integer、Double、Float、Boolean、String等都是final类。