final的定义,final关键字可用于修饰类,变量和方法,意思为“无法改变的,最终,是定死了的”。
final的特性:
1.final修饰的类不能被继承
2.final修饰的方法不能被子类重写,覆盖
3.final修饰的变量(成员变量和局部变量)是常量,只能复制一次
4.当使用的数据不变时,需要定义阅读性强的名称来表示该数据,并将该数据final化。
5.final修饰的变量 名称规范是:所有字母大写(final int AGE=18;),如果是多个字母组成,则在单词之间加_分隔
class Animal{
void shout(){
System.out.println(“啊呜~”);
}
}
class Dog extends Animal{
void shout(){
System.out.println(“汪汪!”);
}
}
public class G
{
public static void main(String[] args){
Dog dog=new Dog();
dog.shout ();
}
}
如上所写编译后的结果:
子类Dog将父类Animal重写了,而如果用final修饰了Animal类的话,
final class Animal{
void shout(){
System.out.println(“啊呜~”);
}
}
class Dog extends Animal{
void shout(){
System.out.println(“汪汪!”);
}
}
public class G
{
public static void main(String[] args){
Dog dog=new Dog();
dog.shout ();
}
}
运行之后就会出现
如图中途中所述,子类已无法继承父类了。
如果final修饰了父类的方法,也会出现类似的报错,这个运用可以理解为(如果你父类中有5个方法,其中2个是你不想被覆盖的,就可以在方法前加final,另外不加final的三个就可以被子类的方法覆盖了,而加了的则还是原来的,不过其实这并没有什么卵用,因为只要有final,控制台就会报错,理解就好- -!)
最后就是final修饰的变量为常量,意思就是当final修饰的变量一旦被赋值了,其值就不能改变了,如果再次对其赋值就会报错,也就是他只能被赋值一次。例:
上图中变量X被第二次赋值后,最终输出的值为2
那么我们在变量前加上final
如图所述,被final修饰过了之后,XMA便成了最终变量,已不能再被赋值(注:final修饰的变量要大写,这是规范,跟类名首字母大写一个意思)
另外附带一提的是,如果在子类方法前加一个final,是可以覆盖父类的方法的,然并卵,知道就好!