本文已参与「新人创作礼」活动,一起开启掘金创作之路。
final关键字
package JavaSE.JavaOOP.finaldemo;
/*
final 修饰 类,方法,属性
修饰 类:不能被继承
方法:不能被重写
属性:不能修改属性值
*/
public class FinalDemo1 {
//final属性
final double PI=3.1415926;
final int n;
final static int m=10;
//final static int m; 报错: Variable 'm' might not have been initialized
//final修饰的属性可以直接赋值或构造方法对其初始化
//final static 修饰的属性则必须在声明时就初始化,且被修饰的属性在内存中只有一份,被所有对象共享
//构造方法对final变量初始化
public FinalDemo1(int a){
n=a;
}
//final方法
public final void a(){
System.out.println("final修饰的方法");
}
/*
void setPI(double d){ PI=d; }
编译报错:Cannot assign a value to final variable 'PI'
final变量无法修改
*/
public void b(){
System.out.println("普通方法");
}
}
package JavaSE.JavaOOP.finaldemo;
//测试例1
public final class Test extends FinalDemo1 {
public static void main(String[] args) {
FinalDemo1 f = new Test(2);
System.out.println(f.m);//输出静态常量
System.out.println(f.PI);//输出常量
f.a();//final方法
f.b();//一般方法
}
public Test(int a) {
super(a);
}
/*
只能重写非final方法
public final void a(){}
编译报错:子类不能重写父类final方法,只能将父类final方法改为非final方法
*/
@Override//非final方法可以重写
public void b() {
System.out.println("子类方法");
}
}
运行结果:
我们看一下继承final类的效果:
package JavaSE.JavaOOP.finaldemo;
public class Test1{
//public class Test1 extends Test{
//编译报错
//final类不能被继承
}