final有三种修饰情况:

1)修饰成员

分配一块存储空间,只能赋值一次。可以在运行时赋值。

static final和final的区别在于前者是类级(全局),后者是对象级(局部)。

final修饰对象或数组的意思是变量的引用不能改,但是引用对象或数组的赋值是可以改的。

2)修饰方法

final修饰方法的参数时,意味着你无法在方法中更改参数引用所指向的对象。

final修饰的方法不会被重载。

final修饰的方法允许编译器转为内嵌,避免调用的开销。

3)修饰类

final修饰的类禁止继承(出于安全考虑)。

下面的代码描述了一个人吓跑一头猪和一只狗的故事:

package TestFinal;  publicclassEntry  {   publicstaticvoidmain(String args[])   {   Pig pig = newPig();  Dog dog = newDog();  Person person = newPerson();  person.frighten(pig);//吓跑猪person.frighten(dog);//吓跑狗 }   }  classPerson{  voidfrighten(Animal animal){  System.out.println("Ho!");  animal.run();//多态  }  }   classAnimal{  voidrun(){//此方法声明为private和final都会出错  System.out.println("Animal run ...");  }  }  classPig extendsAnimal{  voidrun(){  System.out.println("Pig run ...");  }     }  classDog extendsAnimal{  voidrun(){  System.out.println("Dog run ...");  }     }

程序运行结果:

Ho!
Pig run ...
Ho!
Dog run ...

请注意到person.frighten对animal.run的调用,因为输入参数的子类不同,实际执行的代码片断是不同的,这就是“多态”。

如果Animal的run方法声明为private,不影响Dog和Pig可以定义自己的run方法,但是“多态”就没有了,person.frighten中animal.run会报错。

如果Animal的run方法声明为final,person.frighten中animal.run不会报错,但是Dog和Pig中定义run方法会报“不允许重载”的错误信息,当然也就谈不上“多态”了。

参考书:《Thinking in Java 3th Edition》 Bruce Eckel

java学习:理解final相关推荐

  1. 零基础Java学习之final关键字

    final final:最终的,不可更改的 它可以修饰的结构:类.方法.变量 1.修饰类 表示这个类不能被继承,没有子类 final class Eunuch{//太监类} class Son ext ...

  2. java学习:理解abstract

    "多态"基于动态绑定(运行时绑定).在多态结构中基类起到了"接口"的作用,java语言提供了abstract关键字来帮助管理代码. 有abstract方法的类必 ...

  3. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  4. java学习笔记day09 final、多态、抽象类、接口

    java学习笔记day09 思维导图 final . 多态 . 抽象类 . 接口 (都很重要) 一.final 二.多态 多态中的成员访问特点⭐ [P237] 多态的好处 [P239] 多态的弊端 向 ...

  5. 深入理解Java中的final关键字

    深入理解Java中的final关键字 http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什 ...

  6. java学习中,instanceof 关键字 和 final 关键字、值的传递(java 学习中的小记录)...

    java学习中,instanceof 关键字 和 final 关键字.值的传递(java 学习中的小记录)作者:王可利(Star·星星) instanceof 关键字 作用: 1.用来判断某个对象是否 ...

  7. Java学习---day07_继承及final、Object的介绍

    Java学习-day07 简介: 在java中存在继承的思想,来提高代码的复用性,代码的拓展性. 程序中的继承,是类与类之间的特征和行为的一种赠予或获取.一个类可以将自己的属性和方法赠予其他的类,一个 ...

  8. Java学习总结:11(final关键字)

    final关键字 在Java中final称为终结器,在Java中可以使用final定义类.方法和属性. 一.使用final定义的类不能再有子类,即:任何类都不能继承以final声明的父类. 在设计类的 ...

  9. JAVA面试题------------final 关键字是干什么用的?谈谈你的理解。

    final 是 Java 中的关键字,它表示的意思是不可变的,在 Java 中,final 主要用来: 修饰类,final 修饰的类不能被继承,不能被继承的意思就是不能使用 extends 来继承被 ...

  10. (转)深入理解Java中的final关键字

    转自:http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方 ...

最新文章

  1. 在Core WebApi中使用Swagger
  2. ajax中itemtexts,从Jquery Ajax调用CodeMirror textarea的值设置
  3. 时序数据处理工具-时间序列数据特征提取TsFresh
  4. c#爬虫-使用ChromeDriver 所见即所得
  5. table 设置边框
  6. hadoop-0.21.0-eclipse-plugin无法在eclipse中运行解决方案
  7. php和mysql一起_PHP和MYSQL数据库合理且有效的结合在一起_MySQL
  8. SQL Server之旅:(二)Could not load the DLL xpstar90.dll
  9. shell脚本批量创建用户
  10. MAC 安装python3 菜鸟教程
  11. JavaWeb笔记(一)Java网络编程
  12. 【Unity】Unity寻路系统讲解及Navigation实际应用
  13. oracle 独占更新,Oracle的共享封锁 独占封锁和共享更新封锁 (3)
  14. 美国人口的模型预测——非线性最小二乘法
  15. 软件测试过程与方法_第4周单元测试
  16. 积分兑换系统怎样设置“新花样”?
  17. Hybrid接口、MSTP协议
  18. 讯时后台编辑器在IE8下无法打开窗口的解决办法
  19. 手游代理加盟如何避免被套路?
  20. 外包程序员:软件开发人员派遣进行IT人员驻场开发的好处有哪些?

热门文章

  1. 剑指offer-JZ27 二叉树的镜像(C++,附思路)
  2. VS2019-C++警告-C6385读取数据无效
  3. 上位机获取单片机发来的数据并进行检验
  4. oracle 里数据的编码格式,oracle 数据的编码格式
  5. 前端界面请假管理java_小程序新请假界面
  6. java569_java如何实现这样一个程序
  7. c3074 无法使用带圆括号的_地埋警示带预防挖掘 石油管道警示带保护管道安全...
  8. 端口被占用,怎么解决?
  9. Visual studio 2017 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包...
  10. Springboot @Transactional Mysql事务 无效