background image

       Test1 t = new Test1();
       t.f1();

       t.f2(); // 调用从父类继承过来的 final 方法
       t.f3(); // 调用从父类继承过来的方法

       //t.f4(); //调用失败,无法从父类继承获得
    }

}
  结果为:

Test2 父类方法 f1 被覆盖!
f2

f3
     4)final

 

变量(常量)

            用 final 修饰的成员变量表示常量,值一旦给定就无法改变!
                final 修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。

                从下面的例子中可以看出,一旦给 final 变量初值后,值就不能再改变了。
另外,

final 变量定义的时候,可以先声明,而不给初值,这中变量也称为 final 空白,无论什么情况,编译器

都确保空白

final 在使用之前必须被初始化。但是,final 空白在 final 关键字 final 的使用上提供了更大的

灵活性,为此,一个类中的

final 数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。

对于

final 类型的实例变量,可以在定义变量时,或者在构造方法中进行初始化;对于 final 类型的静态变量,

可以在定义变量时进行初始化,或者在静态代码块中初始化。
public class Sample {
    static final int a = 10;

    static final int b;
    static {//静态块中初始化 final 类型静态成员变量

       b = 15;
    }

 
    void methodPrintln() {

       System.out.println("调用方法输出:");
       System.out.println(a);

       System.out.println(b);
    }

 
    public static void main(String[] args) {

       Sample sa = new Sample();
       System.out.println("实例化对象输入");

       System.out.println(sa.a);
       System.out.println(sa.b);

 
       System.out.println("静态成员变量,不用实例化也可以输出:");

       System.out.println(Sample.a);
       System.out.println(Sample.b);

 
       sa.methodPrintln();

    }
}

   结果为:
实例化对象输入
10
15
静态成员变量,不用实例化也可以输出:
10

15
调用方法输出:
10
15

     
      如果将引用类型的变量用 final 修饰,那么该变量只能始终引用一个对象,但可以改变对象的内容。