Java final类

来源:互联网 发布:网络银行联盟 编辑:程序博客网 时间:2024/06/08 15:52

final 具有“不可改变”的含义,他可以修饰非抽象类、非抽象成员方法和变量。

1、用final修饰的类不能被继承,没有子类。

2、用final修饰的方法不能被子类的方法重写或隐藏。

3、用final修饰的变量表示常量,只能被赋值一次。

4、父类中的用private修饰的方法不能被子类的方法重写,因此private类型的方法默认为是final类型的。

final类的使用

1、不是专门为继承而设计的类,类本身的方法之间有复杂的调用关系。如果随意创建这些类的子类,子类有可能错误的修改父类的细节。

2、出于安全的原因,类的实现细节不允许有任何改动。

3.、在创建对象模型时,确信这个类不会再被扩展。

final方法

假如父类允许子类继承父类的某些方法或重写某些方法,但保留某些方法,时这些方法不能被继承,那么父类可以将这些方法声明为final类型。如果父类的某个方法是private,子类将无法继承该方法,自然也就无法重写或隐藏该方法。

package javademo;class Parent{private final void method1(){//定义method1()方法为final方法System.out.println("Parent.method1()");}final void method2(){System.out.println("Parent.method2()");}public void method3(){System.out.println("Parent.method3()");}}class Son extends Parent{public final void method1(){//在子类中定义一个method1()方法System.out.println("Son.method1()");}//final void method2(){ //final方法不能被重写//System.out.println("Son.method2()");//}public void method3(){System.out.println("Son.method3()");}}public class FinalMethod {public static void main(String[] args) {// TODO Auto-generated method stubSon s  = new Son(); s.method1();Parent p = s; //执行向上转型操作//p.method1(); //不能调用private方法p.method2();p.method3();}}

作为final方法不能被子类重写或隐藏,例如method2()方法就不能在子类中被重写,但是在父类中定义了一个private final 的method1()方法,同时子类中也定义method1()方法,但这不是方法的重写。方法的重写的前提条件是只有子类能继承的实例方法才会被重写,而父类的method1()方法是不能被继承的,因此这个方法不能被重写,只是在子类中定义的新方法而已,着来年各个方法之间毫无法关系的。

final变量

一个变量被限定为final,其实是将它定义为一个符号常量。

final变量具有以下特点:

1、final修饰符可以修饰静态变量、实例变量、局部变量,分别表示静态常量、实例常量、局部常量。

2、final成员百年来那个应该是显式初始化,否则final类型的实例变量会导致编译错误


原创粉丝点击