一、final关键字
如果一个类被final修饰符所修饰,表示该类不可能有子类,这样的类就叫做最终类。final关键字可以修饰类、变量、方法。
final关键字修饰类、修饰方法、修饰变量的特点
final关键字修饰类:不能被别的类继承;
final关键字修饰方法:方法也不能被覆盖,也就是方法不能被继承的子类重写;
final关键字修饰变量:成员变量、局部变量是常量,仅一次赋值。
二、final关键字修饰类
当类被final关键字修饰,表示这个类是不能被继承的。
final关键字修饰类例子
- //定义Fruit类
- final class Fruit{
- //info()方法
- public void info(){
- System.out.print("fruit");
- }
- }
- //定义Cherry继承Fruit类
- class Cherry extends Fruit{
- //infor()方法
- public void info(){
- System.out.print("cherry");
- }
- }
- public class p24 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Cherry c=new Cherry();//实例化子类Cherry对象
- c.info();//调用info()方法
- }
- }
输出的结果是:
从上面的编译结果可以看出是错误的,因为final关键字修饰Fruit类,当Cherry类继承Fruit类时,编译出现了“Unresolved compilation problem: The type Cherry cannot subclass the final class Fruit”表示Cherry类型不能将final类水果子类化,所以final修饰的类是不能被别的类继承的。
三、final关键字修饰方法
final关键字修饰方法,表示该类的子类的不可以重写方法。
final关键字修饰方法案例
- //定义Fruit类
- class Fruit{
- //使用final修饰info()方法
- public final void info(){
- System.out.print("fruit");
- }
- }
- //定义Cherry继承Fruit类
- class Cherry extends Fruit{
- //重写Fruit类的info()方法
- public void info(){
- System.out.print("cherry");
- }
- }
-
- public class p24 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Cherry c=new Cherry();//实例化子类Cherry对象
- c.info();//调用info()方法
- }
- }
运行的结果是:
从上面的代码中编译结果是错误的,因为Cherry类重写Fruit类的info()方法,我们可以看到final关键字修饰Fruit类的info()方法,所以final关键字修饰的方法是最终的,子类是不能对这个方法进行重写的。如果父类定义的某个方法,不想让子类重写,就可以使用这个final关键字修饰方法。
四、final关键字修饰变量
final关键字修饰变量时,变量就变成常量,也就是一旦被赋值,就不能重新赋值。
final关键字修饰成员变量,需要在定义显示指定初始值。
final关键字修饰局部变量,可以在定义时指定初始值,也可以不指定初始值。
final关键字修饰局部变量的例子
- final int i = 3;//第一次赋值
- i= 6;//再次赋值
上面代码中会出现编译错误,因为是重新给i赋值,用final关键字修饰int类型变量i,被final关键字修饰的变量为常量,只能被赋值一次,不可以被重新赋值,i是基本数据类型,i的内容是值。
final关键字修饰成员变量例子
- //定义Fruit类
- class Fruit{
- final String name;//final关键字修饰name属性
- double weight=66;//水果的重量weight属性
- //info()方法打印水果信息
- public final void info(){
- System.out.print("我是一个"+name+"重量为:"+weight+"g!");
- }
- }
-
- public class p24 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Fruit f=new Fruit();//实例化Fruit对象
- f.info();//调用info()方法
- }
- }
运行的结果是:
从上面的运行结果我们可以看到编译是错误的,因为final关键字修饰的成员变量,在定义的时要给它一个初始值。
五、总结
本文主要介绍了final关键字修饰类、final关键字修饰方法、final关键字修饰变量。
final关键字修饰类说明了是不能被别的类继承的。final关键字修饰方法表示该类的子类的方法是不可以被重写的。
final关键字修饰变量时,成员变量、局部变量是常量,仅一次赋值。final关键字修饰类、方法、变量也通过案例帮助理解。
本文转载自微信公众号「 Java进阶学习交流」,可以通过以下二维码关注。转载本文请联系 Java进阶学习交流公众号。