关键字final的使用:
在声明Java类、变量和方法时可以使用final关键字修饰,使其具有“终态”的特性。
1、final常见的一些特性:
(1)final修饰的类不能被继承,故没有子类,其方法永远不能被重写。
(2)final修饰的方法不能子类被重写,但是所在的类可以被继承。
(3)fina修饰的变量即为常量,只能赋值一次,可以在声明的同时赋值,也可以单独赋值,一旦赋值就不能再改变。
(4)final不能修饰构造方法。
(5)父类的private成员是不能被子类方法重写的,所以private类型的方法默认是 final 类型的。
2、final修饰Java类
final修饰的类不能被继承,故没有子类,其方法永远不能被重写。
pubic final class A { }
3、final修饰方法
如果一个类不允许子类重写某个方法,则把他声明为final方法即可:
使用final方法的好处:
(1)将方法锁定,防止任何子类篡改他的具体功能和实例;
(2)Java语言规范允许编译器对final方法的调用进行优化,即所谓的“直列式处理”。
public class Test1 {
public void t1() {
System.out.println("t1");
}
---无法被子类重写的方法
public final void t2() {
System.out.println("t2");
}
public void t3() {
System.out.println("t3");
}
private void t4() {
System.out.println("t4");
}
}
public class Test2 extends Test1 {
public void t1(){
System.out.println("Test1父类方法t1被重写!");
}
public static void main(String[] args) {
Test2 t = new Test2 ();
t.t1();
t.t2(); ---调用从父类继承过来的final方法
t.t3(); ---调用从父类继承过来的方法
---t.t4(); ---调用失败,无法从父类继承获得
}
}
程序运行输出结果为:
Test1父类方法t1被重写!
t2
t3
4、final修饰常量(变量)
final修饰Java变量,包括成员变量和局部变量。final修饰的变量即为常量,只能赋值一次,可以在声明的同时赋值,也可以单独赋值。
final修饰成员变量,在初始化时分为2 种情况:
(1)声明为final实例变量时,必须在声明的同时或在每个构造方法中显式的赋值,而且这两种初始化方式不能同时出现,否则编译报错。
(2)声明为final类变量时,必须在声明的同时或者在static初始化块中显式赋值,且这两种初始化方式不能同时使用,否则编译报错。
public class test3 {
public static final String name = "Jim";
private static int sum = 1000 ;
int id;
public test3(){
id = ++sum;
}
public int getId(){
return id;
}
public int getSum(){
return sum;
}
public static void main (String[] args){
test3 t = new test3();
System.out.println(t.name + "\t" + t.getId());
final int m = 10 ;
final int n ;
m = 20 ;--- 错误用法。
n = 30 ;
}
}
程序运行输出结果为:
Jim 1001
5、final修饰参数
当函数参数为final类型时,可以读取使用该值,但是不能修改。
public class test4 {
public static void main(String[] args) {
new test4().t1(2);
}
public void t1(final int i) {
//i++; ---i是final类型的,值不允许改变
System.out.print(i);
}
}
程序运行输出结果为:
2