“全栈2019”Java第五十一章:继承与final关键字详解

131 阅读4分钟
原文链接: www.toutiao.com

难度

初级

学习时间

30分钟

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

提示

本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。

1.被final修饰的字段

被final修饰的变量是常量。

演示:

定义一个类,类中所有字段被final修饰。

代码:

Student类:

“全栈2019”Java第五十一章:继承与final关键字详解

Main类:

“全栈2019”Java第五十一章:继承与final关键字详解

结果:

“全栈2019”Java第五十一章:继承与final关键字详解

运行结果完全正确。因为是常量,所以无法被改变。

2.继承中被final修饰的字段

子类不可以修改父类中被final修饰的字段的值。

演示:

父类中所有字段被final修饰,子类进行修改父类中被final修饰的字段的值。

代码:

People类:

“全栈2019”Java第五十一章:继承与final关键字详解

Student类:

“全栈2019”Java第五十一章:继承与final关键字详解

Main类:

“全栈2019”Java第五十一章:继承与final关键字详解

结果:

“全栈2019”Java第五十一章:继承与final关键字详解

错误信息:

“全栈2019”Java第五十一章:继承与final关键字详解

文字版:

/Users/admin/Workspace/Java/Hello/src/lab/Student.javaError:(10, 9) java: 无法为最终变量name分配值Error:(11, 9) java: 无法为最终变量id分配值

因为是最终变量,所以即使是继承也不能改变其值。

子类可以隐藏父类中被final修饰的字段。

演示:

父类中所有字段被final修饰,子类声明和父类一样字段,看能否隐藏父类中字段。

代码:

People类:

“全栈2019”Java第五十一章:继承与final关键字详解

Student类:

“全栈2019”Java第五十一章:继承与final关键字详解

Main类:

“全栈2019”Java第五十一章:继承与final关键字详解

结果:

“全栈2019”Java第五十一章:继承与final关键字详解

从运行结果来看,子类将父类中被final修饰的字段隐藏了。

3.被final修饰的方法

被final修饰的方法称为最终方法。

演示:

定义一个类,类中所有方法都被final所修饰。

代码:

Student类:

“全栈2019”Java第五十一章:继承与final关键字详解

Main类:

“全栈2019”Java第五十一章:继承与final关键字详解

结果:

“全栈2019”Java第五十一章:继承与final关键字详解

正常调用,没有问题。

4.继承中被final修饰的方法

子类可以正常调用父类中被final修饰的方法。

演示:

子类是否可以正常调用被final修饰的方法。

代码:

People类:

“全栈2019”Java第五十一章:继承与final关键字详解

Student类:

“全栈2019”Java第五十一章:继承与final关键字详解

Main类:

“全栈2019”Java第五十一章:继承与final关键字详解

结果:

“全栈2019”Java第五十一章:继承与final关键字详解

从运行结果来看,子类可以正常调用父类中被final修饰的方法。

在继承中,我们可以在方法声明中使用final关键字来指定子类不能覆盖该方法。

演示:

代码:

People类:

“全栈2019”Java第五十一章:继承与final关键字详解

Student类:

“全栈2019”Java第五十一章:继承与final关键字详解

Main类:

“全栈2019”Java第五十一章:继承与final关键字详解

结果:

“全栈2019”Java第五十一章:继承与final关键字详解

错误信息:

“全栈2019”Java第五十一章:继承与final关键字详解

文字版:

/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类:

“全栈2019”Java第五十一章:继承与final关键字详解

Student类:

“全栈2019”Java第五十一章:继承与final关键字详解

类方法无需使用final关键字修饰。

5.被final修饰的类

被final关键字修饰的类称为最终类。

演示:

定义一个类,使用final关键字进行修饰。

代码:

Student类:

“全栈2019”Java第五十一章:继承与final关键字详解

Main类:

“全栈2019”Java第五十一章:继承与final关键字详解

结果:

“全栈2019”Java第五十一章:继承与final关键字详解

程序运行正常,Student对象被正常实例化。

6.继承中被final修饰的类

被final声明的类不能被子类继承。

演示:

父类被final修饰,子类不能继承。

代码:

People类:

“全栈2019”Java第五十一章:继承与final关键字详解

Student类:

“全栈2019”Java第五十一章:继承与final关键字详解

Main类:

“全栈2019”Java第五十一章:继承与final关键字详解

结果:

“全栈2019”Java第五十一章:继承与final关键字详解

错误信息:

“全栈2019”Java第五十一章:继承与final关键字详解

文字版:

/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第五十章:继承与构造方法详解

下一章

“全栈2019”Java第五十二章:继承与初始化详解

学习小组

加入同步学习小组,共同交流与进步。

  • 方式一:关注头条号Gorhaf,私信“Java学习小组”。
  • 方式二:关注公众号Gorhaf,回复“Java学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

“全栈2019”Java第五十一章:继承与final关键字详解

版权声明

原创不易,未经允许不得转载!