//由于继承中有方法的重写,所以子类会覆盖父类的方法
//有时候我们不想子类覆盖父类的方法,所以java提供了一个关键字:final
final的特点:
修饰类:被final修饰的类不能被继承
修饰方法:被final修饰的方法不能被重写
修饰变量:被final修饰的变量不能被重新赋值(自定义常量)
栗子1:
class fu{
public final void eat() {
}
}
class zi extends fu{
public final void eat() {//被final修饰的方法不能被重写,所以这里报错
}
}
栗子2:
final class fu1{
}
class zi1 extends fu1{//被final修饰的类不能被继承,所以这里报错
}
栗子3:
class fu2{
final int num=10;
}
class zi2 extends fu2{
public void eat() {
num=100;//被final修饰的变量不能被重新赋值(自定义常量),所以这里报错
}
}
//final修饰局部变量的问题
1.局部变量是基本数据类型(基本类型的值不可以改变)
2.局部变量是引用数据类型(引用数据类型的地址值不可以改变,就是不可以再new一次)
final修饰引用数据类型时是引用类型的地址值不变,只有重新new的时候才会改变地址值,才会重新分配内存空间,此时报错
注意:代码执行顺序,静态代码块>构造代码块>构造方法,所以final之后执行的代码中是不可以有基本数据类型重新赋值的语句的