final的使用场景:
1.有些类在描述完之后,不想被继承
2.有些类中的部分方法功能是固定的,不想让子类重写
为了解决上述问题,我们需要使用final修饰符:final是最终,不可变的意思,它可以用来修饰类,类的成员以及成员变量和局部变量
final的使用分析:
1.final修饰的类不可以配继承,但是可以继承其他类
class A {} //A类
final class B extends A{} //B可以继承A类
class C extends B{} //C不能继承B类
2.final修饰的方法不可以被覆盖,但是父类没有被final修饰的方法,子类覆盖后可以加上final
class A {
// final修饰的方法,不可以被覆盖,但可以继承使用
public final void method1(){}
public void method2(){}
}
class B extends A {
//重写method2方法
public final void method2(){}
}
3.final修饰的变量成为常量,该变量只能被赋值一次;在编译生产.class文件后,该变量变为常量值
final int j = 30;
j = 40; //赋值报错,final修饰的变量只能赋值一次
4.final修饰成员变量,需要在创建对象前赋值,否则报错(当没有显式赋值时,多个构造方法的均需要为其赋值)
class FinalDemo {
//直接赋值
final int i = 200;
//final修饰的成员变量,需要在创建对象前赋值,否则报错。
final int m;
public Demo(){
//可以在创建对象时所调用的构造方法中,为变量m赋值
m = 2017;
}
}
5.final修饰引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改
final Man m = new Man();
Man m2 = new Man();
m = m2; //final修饰的变量m,所记录的地址值不能改变
m.name = "lsy";//可以更改m对象中name属性值