如何使用final?

来源:互联网 发布:sql字段别名 编辑:程序博客网 时间:2024/05/21 13:57

使用final前,我们得对final有一定的了解才能进行使用。


final变量

      final关键字在声明了变量之后,就不可以再改变该变量的值,通常由final定义的变量为常量。final除了可以修饰基本数据类型的常量,还可修饰对象的引用,数组可以看成一个修饰对象的引用,所以final可以用来修饰数组。一旦一个对象引用被修饰成final之后,它就只能恒定指向一个对象,无法将其改变指向另外一个对象,一个既是static又是final修饰的字段只占据一段不能改变的存储空间。


final方法

final方法不能被重写。

将方法声明为final,那就说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。另外有一种被称为inline的机制,它会使你在调用final方法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会影响效率,所以你要慎用final进行方法定义。
注意:
父类   private final 方法1();
子类   private final 方法1();当然子类是extend是父类的
那么在调用方法1时,父类会被覆盖吗?不会,final方法没有被覆盖,子类中没有被重写。子类中无法被正常覆盖,而是生成了一个新的方法。

final类

当你将final用于类身上时,你就需要仔细考虑,因为一个final类是无法被任何人继承的,并且不允许其他人对这个类进行改动。那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。
对于final类中的成员变量,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final类中的方法加上一个final,但这显然没有意义。



0 0
原创粉丝点击