最终类 final|学习笔记

简介: 快速学习最终类 final,前面说的 PHP 是可以继承的,类是可以继承的,类有我可以继承子类,再往后类又可以继承孙子类,类可以无无限继承,现在确定一个问题,类继承的多了,代表类的重用性增加了,但是系统的解析复杂程度会增加,随之而来的是效率的降低。那如果有些类已经达到最小的程度,无法再扩展时,或者不需要继续扩展了,这个时候就要使用最终类 final。现在了解一些什么是最终类,掌握 final 关键字的最终作用和实际应用场景。

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第二阶段:最终类final】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/712/detail/12697


最终类 final


主要内容:

一、概念

二、示例


一、概念

final 关键字的概念,使用 final 关键字修饰类名,表示此类不可被继承,这个类已经不可以被扩展了,最终哪个类表示类已经到头,不要允许再作为其他类的父类,只能实例化使用,final 修饰的类叫最终类,final 还能修饰方法,表示修饰的方法不能被重写,子类继承的方法也不能被重写,不能因后面的方法改变规则,final 修饰的不管是类还是方法,都是为了保护结构不被恶意拓展或者修改,不能继承类,不能再这个类的基础上重写或者扩展。Final 修饰的类是所有方法都不能被重写,而final 被修饰的类是不能修改,其他的类是可以修改的。


二、示例

1.定义 final class 类名,就是再 class 前面加上 final

#最终类

final  class Man{}

2.表明这个类无法被继承,再用一个子类尝试继承这个类,系统会报错

class  Man18  extends Man{}

来看看具体效果

图片1.png

加上 final ,就说明 son 不能继承 man 类,不能从这里面继承,原因是 final class 类,因为他是一个最终类。是错误操作,因为 final 类不能被继承。但说明类直接被使用,需要实例化。

#错误操作:final 类不能被继承

3. #class  Son  extends Man{}

4. Final 修饰的类不能被继承,它还可以修饰方法,被修饰的类不能被重写。

final 类中没有必要再使用 final 关键字修饰方法,因为这个类根本就不能继承,所有不存在方法被重写,一般类不允许某个方法被重写,这个方法要用到三个关键字修饰,比如说第一个 public function beoverride 这是可以被重写的一个方法,final public function notbeoverride 就表示方法不能被重写,但是此时这个类是可以继承的,因为此时这个方法是可以被继承的 class woman extends human

#一般类:但是不允许某个方法被重写

Class Human{

public function beoverride(){

}

final public function notbeoverride(){

}

}

class woman extends human{

}

可以继承的,继承之后重写这个方法 public function beoverride,什么都没做直接重写也是没有问题的。

public function beoverride (){}

如果要重写 final 父类方法,就是 public function  notbeoverride。

#重写 final 方法(父类)

Public  function notbeoverride (){}

图片2.png

显示不能够重写最终方法,说明不能被重写。不能重写只能使用,是一种特点。


三、小结

最后做一个总结,final 关键字修饰的类表示无法继承,final 修饰方法表示子类不能重写,通常这个地方不会使用 final 关键字,有哪位要保证这个类能够被继承才会使用。Final 修饰类表示不希望类再出现子类,可以保护类的内部结构不被披露,可以有效控制继承链,再往下走,这个继承链不会太长,final 修饰方法表示不希望方法被修改,可以再一个更高的维度来保证同类事务的共同表现。

相关文章
|
6月前
|
C++
【C++11特性篇】C++11中の【override】【final】关键字——帮助用户检测是否重写
【C++11特性篇】C++11中の【override】【final】关键字——帮助用户检测是否重写
|
编译器 C++
C++11新特性探究:显式override和final
C++中,我们一般可以以基类声明纯虚函数,然后让派生类继承并重写这个虚函数,用override表示显示覆盖基类方法,但一直没有提供一种方法来阻止派生类继承基类的虚函数。
|
存储 Java 程序员
深入理解Java中的三个修饰符(抽象(abstract)、静态(static)和最终的,不可变(final))【配视频】
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
366 0
深入理解Java中的三个修饰符(抽象(abstract)、静态(static)和最终的,不可变(final))【配视频】
|
存储 Java
Java基础:static的理解(含义、用法及静态修饰的优先顺序)
Java基础:static的理解(含义、用法及静态修饰的优先顺序)
234 0
Java基础:static的理解(含义、用法及静态修饰的优先顺序)
|
缓存 Java
通过JDK源码角度分析Long类详解
通过JDK源码角度分析Long类详解
通过JDK源码角度分析Long类详解
|
Java
Java - 类变量(static)初始化过程案例分析
Java - 类变量(static)初始化过程案例分析
119 0
|
安全
获取Class对象的其他方式
获取Class对象的其他方式
103 0
4.16.1假设有如下程序: public
15.假设有如下程序: public class Demo { public static void main(String args[]) { int num = 2147483647 ; long temp = num + 2L ; System.out.println(temp) ; } } 最终的执行结果是什么? A. -2147483648 B. 2147483649 C. 2147483647 D. 2 相关知识点: https://edu.aliyun.com/course/34 正确答案:B
480 0