java学习:理解final
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相关推荐
- 零基础Java学习之final关键字
final final:最终的,不可更改的 它可以修饰的结构:类.方法.变量 1.修饰类 表示这个类不能被继承,没有子类 final class Eunuch{//太监类} class Son ext ...
- java学习:理解abstract
"多态"基于动态绑定(运行时绑定).在多态结构中基类起到了"接口"的作用,java语言提供了abstract关键字来帮助管理代码. 有abstract方法的类必 ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- java学习笔记day09 final、多态、抽象类、接口
java学习笔记day09 思维导图 final . 多态 . 抽象类 . 接口 (都很重要) 一.final 二.多态 多态中的成员访问特点⭐ [P237] 多态的好处 [P239] 多态的弊端 向 ...
- 深入理解Java中的final关键字
深入理解Java中的final关键字 http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什 ...
- java学习中,instanceof 关键字 和 final 关键字、值的传递(java 学习中的小记录)...
java学习中,instanceof 关键字 和 final 关键字.值的传递(java 学习中的小记录)作者:王可利(Star·星星) instanceof 关键字 作用: 1.用来判断某个对象是否 ...
- Java学习---day07_继承及final、Object的介绍
Java学习-day07 简介: 在java中存在继承的思想,来提高代码的复用性,代码的拓展性. 程序中的继承,是类与类之间的特征和行为的一种赠予或获取.一个类可以将自己的属性和方法赠予其他的类,一个 ...
- Java学习总结:11(final关键字)
final关键字 在Java中final称为终结器,在Java中可以使用final定义类.方法和属性. 一.使用final定义的类不能再有子类,即:任何类都不能继承以final声明的父类. 在设计类的 ...
- JAVA面试题------------final 关键字是干什么用的?谈谈你的理解。
final 是 Java 中的关键字,它表示的意思是不可变的,在 Java 中,final 主要用来: 修饰类,final 修饰的类不能被继承,不能被继承的意思就是不能使用 extends 来继承被 ...
- (转)深入理解Java中的final关键字
转自:http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方 ...
最新文章
- 在Core WebApi中使用Swagger
- ajax中itemtexts,从Jquery Ajax调用CodeMirror textarea的值设置
- 时序数据处理工具-时间序列数据特征提取TsFresh
- c#爬虫-使用ChromeDriver 所见即所得
- table 设置边框
- hadoop-0.21.0-eclipse-plugin无法在eclipse中运行解决方案
- php和mysql一起_PHP和MYSQL数据库合理且有效的结合在一起_MySQL
- SQL Server之旅:(二)Could not load the DLL xpstar90.dll
- shell脚本批量创建用户
- MAC 安装python3 菜鸟教程
- JavaWeb笔记(一)Java网络编程
- 【Unity】Unity寻路系统讲解及Navigation实际应用
- oracle 独占更新,Oracle的共享封锁 独占封锁和共享更新封锁 (3)
- 美国人口的模型预测——非线性最小二乘法
- 软件测试过程与方法_第4周单元测试
- 积分兑换系统怎样设置“新花样”?
- Hybrid接口、MSTP协议
- 讯时后台编辑器在IE8下无法打开窗口的解决办法
- 手游代理加盟如何避免被套路?
- 外包程序员:软件开发人员派遣进行IT人员驻场开发的好处有哪些?
热门文章
- 剑指offer-JZ27 二叉树的镜像(C++,附思路)
- VS2019-C++警告-C6385读取数据无效
- 上位机获取单片机发来的数据并进行检验
- oracle 里数据的编码格式,oracle 数据的编码格式
- 前端界面请假管理java_小程序新请假界面
- java569_java如何实现这样一个程序
- c3074 无法使用带圆括号的_地埋警示带预防挖掘 石油管道警示带保护管道安全...
- 端口被占用,怎么解决?
- Visual studio 2017 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包...
- Springboot @Transactional Mysql事务 无效