十七、Java基础之final
一、final修饰的类无法被继承
1.final的意思就是:最终的,最后的
例1:
final class A{} class B extends A{}//无法从最终com.study.final关键字详解.A进行继承
二、final修饰的方法无法被继承
例2
public class Test01 { public final void m1(){} } class Test02 extends Test01{ //方法覆盖 // public void m1(){}//com.study.final关键字详解.Test02中的m1()无法覆盖com.study.final关键字详解.Test01中的m1()被覆盖的方法为final }
三、final修饰的局部变量,一旦赋值,不可改变
例3:
class A{ public void m1(){ //声明 final int i; //第一次赋值 i=100; //final定义的变量,不能重复赋值 //i=200;//可能已分配变量i } }
四、final修饰的成员变量必须“显示的”初始化
例4:
class A{ //final修改的成员变量必须手动初始化 //final int i; final int i=100; //final修饰的成员变量,在构造方法调用结束之前,赋值即可 final int k; //constructor A(){ k=100; } }
五、final修饰的成员变量一般与static联用,被称作“常量”,java语言中规定所有的常量必须大写
例5:
class MyMath{ //常量。java规范中要求所有的的常量“大写” //常量,值不可再改变的变量 public static final int PL=100; }
六、深入final
1.抽象类不能被final修饰
2.抽象方法不能被final修饰
public /*final*/ abstract class Test02 {//Error:(7, 23) java: 非法的修饰符组合: abstract和final public /*final*/ abstract void m1(); }
3.final修饰的引用类型,该引用不可再重新指向其他的java对象。但是final修饰的引用,该引用指向的对象的属性是可以修改的
public class Test02{ public static void main(String[] args){ final Customer c=new Customer("lucy",12); //c是final的,无法重新赋值 //c=new Customer("lack",13);//Error c.name="李四"; c.age=14; System.out.println(c.name);//李四 System.out.println(c.age);//14 } } class Customer{ String name; int age; Customer(String name,int age){ this.name=name; this.age=age; } }
当有些人一出生就有的东西,我们要为之奋斗几十年才拥有。但有一样东西,你一辈子都不会有,那就是我们曾经一无所有。