final的意思是最终的。先看一下final声明类:
public final class Demo{
}
可以正常编译,这说明final是可以用来声明类的。那最终的类又是什么意思呢?在学习常量的时候用到了final这个关键字,常量不允许修改。那用final修饰的类应该也是不能修改的,那类是怎么修改的呢?是根据Java的继承性来对父类进行延伸以及重写父类的方法来进行修改的。所以final修饰的类应该就是不能被继承的。
public class Demo1 extends Demo{
}
上述代码会编译出错(extends是子类继承父类的关键字)。所以final修饰的类不能被继承,因此final修饰的类也叫做太监类(不能有子类)。final修饰的类通常是一些不需要拓展的工具类,比如String类,Integer类等。
final修饰属性就是常量,它只能被赋值一次,之后不能修改,所以它常常跟static合用,通过static final(final static也可以)将其设计成全局常量(类常量),让所有对象都能够共享。
final可以修饰方法。用final修饰方法的目的显然就是让子类无法重写该方法了。在修饰方法的时候final也可以搭配着static一起使用。
final修饰构造器:
public class Person{
public final Person(){}
}
上述代码会编译出错,也就是说final无法用来修饰构造器,为什么呢?因为构造器是用来创建对象的,不同的类的构造器肯定也是不同的,所以不需要用final来修饰。