引入
回顾:在继承中,父类的成员可以被子类所覆盖
引入:不希望被子类覆盖的场景
解决方法:final修饰符
1.final类(最终类)
最终类,不可以有子类
不可以被继承
优点:final类通常是一些有固定作用,完成某种标准功能的类,如Java类库中用来实现某些网络功能的类
2.final域
final修饰变量
说明是最终变量,即常量
值一旦给定,在程序执行过程中都不会改变
final成员变量,final局部变量都是只读量
static final修饰,若不给定初始值,按默认值初始化
数值为0,boolean型为false,引用型为null
static final域举例
如:Math.PI
3.final方法
final修饰方法
最终方法
功能和内部语句不能被改变,即不能被子类所覆盖
final方法的好处:固定该方法所对应的具体操作,防止子类误对父类关键方法的重定义,保证程序安全性和正确性
默认规则:所有被private限定的私有方法及所有包含在final类中的方法,都被缺省地认为final方法
父类中声明为final的成员在子类中可以被继承,但不能被覆盖
例
class AAA{
static final double PI = 3.14;
public final void show(){
System.out.println("PI="+PI);
}
}
class BBB extends AAA{
private int num = 100;
public void show(){//会报错父类的show()是final方法不能覆盖
System.out.println("PI="+PI);
}
}
public class Test {
public static void main(String[] args) {
BBB ex = new BBB();
ex.show();
}
}
4.static与final小结
final
final在方法之前,防止该方法被覆盖
final在类之前,表示该类不能被继承
final在变量之前,定义一个常量
static
static在变量或方法之前,表面他们属于类
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201120160305999.png#pic_center