难度
初级
学习时间
30分钟
适合人群
零基础
开发语言
Java
开发环境
- JDK v11
- IntelliJ IDEA v2018.3
提示
本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。
1.被final修饰的字段
被final修饰的变量是常量。
演示:
定义一个类,类中所有字段被final修饰。
代码:
Student类:
Main类:
结果:
运行结果完全正确。因为是常量,所以无法被改变。
2.继承中被final修饰的字段
子类不可以修改父类中被final修饰的字段的值。
演示:
父类中所有字段被final修饰,子类进行修改父类中被final修饰的字段的值。
代码:
People类:
Student类:
Main类:
结果:
错误信息:
文字版:
/Users/admin/Workspace/Java/Hello/src/lab/Student.javaError:(10, 9) java: 无法为最终变量name分配值Error:(11, 9) java: 无法为最终变量id分配值
因为是最终变量,所以即使是继承也不能改变其值。
子类可以隐藏父类中被final修饰的字段。
演示:
父类中所有字段被final修饰,子类声明和父类一样字段,看能否隐藏父类中字段。
代码:
People类:
Student类:
Main类:
结果:
从运行结果来看,子类将父类中被final修饰的字段隐藏了。
3.被final修饰的方法
被final修饰的方法称为最终方法。
演示:
定义一个类,类中所有方法都被final所修饰。
代码:
Student类:
Main类:
结果:
正常调用,没有问题。
4.继承中被final修饰的方法
子类可以正常调用父类中被final修饰的方法。
演示:
子类是否可以正常调用被final修饰的方法。
代码:
People类:
Student类:
Main类:
结果:
从运行结果来看,子类可以正常调用父类中被final修饰的方法。
在继承中,我们可以在方法声明中使用final关键字来指定子类不能覆盖该方法。
演示:
代码:
People类:
Student类:
Main类:
结果:
错误信息:
文字版:
/Users/admin/Workspace/Java/Hello/src/lab/Student.javaError:(11, 23) java: lab.Student中的sayHi()无法覆盖lab.People中的sayHi() 被覆盖的方法为finalError:(18, 30) java: lab.Student中的sayHello()无法覆盖lab.People中的sayHello() 被覆盖的方法为static,final
实际上,父类中可以给方法指定final关键字来声明不能被子类所重写。实际开发中还是有这样的需求。
注意:
当在子类中重写静态方法时,仍然可以通过父类访问它,使得最终声明不是非常必要。 声明一个静态方法final会阻止子类定义具有相同签名的静态方法。
意思就是说,静态方法没有必要再用final关键字修饰,因为静态方法属于类方法,通过类名即可调用,子类仍然可以访问,所以就达不到final修饰的效果。
代码:
People类:
Student类:
类方法无需使用final关键字修饰。
5.被final修饰的类
被final关键字修饰的类称为最终类。
演示:
定义一个类,使用final关键字进行修饰。
代码:
Student类:
Main类:
结果:
程序运行正常,Student对象被正常实例化。
6.继承中被final修饰的类
被final声明的类不能被子类继承。
演示:
父类被final修饰,子类不能继承。
代码:
People类:
Student类:
Main类:
结果:
错误信息:
文字版:
/Users/admin/Workspace/Java/Hello/src/lab/Student.java
Error:(6, 30) java: 无法从最终lab.People进行继承
被final修饰的类无法被继承。
总结
- 父类中被final修饰的字段,子类可以隐藏。
- 父类中被final修饰的实例方法,子类不可以重写。
- 父类中被final修饰的类方法,子类可以隐藏。
- 静态方法无需用final进行修饰。因为子类仍然可以通过类名调用。
- 被final修饰的类称为最终类,无法被子类继承。
至此,Java中继承与final关键字相关内容讲解先告一段落,更多内容请持续关注。
答疑
如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。
上一章
下一章
“全栈2019”Java第五十二章:继承与初始化详解
学习小组
加入同步学习小组,共同交流与进步。
- 方式一:关注头条号Gorhaf,私信“Java学习小组”。
- 方式二:关注公众号Gorhaf,回复“Java学习小组”。
全栈工程师学习计划
关注我们,加入“全栈工程师学习计划”。
版权声明
原创不易,未经允许不得转载!