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 修饰,那么该变量只能始终引用一个对象,但可以改变对象的内容。