开发者学堂课程【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{}
来看看具体效果
加上 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
(){}
显示不能够重写最终方法,说明不能被重写。不能重写只能使用,是一种特点。
三、小结
最后做一个总结,final 关键字修饰的类表示无法继承,final 修饰方法表示子类不能重写,通常这个地方不会使用 final 关键字,有哪位要保证这个类能够被继承才会使用。Final 修饰类表示不希望类再出现子类,可以保护类的内部结构不被披露,可以有效控制继承链,再往下走,这个继承链不会太长,final 修饰方法表示不希望方法被修改,可以再一个更高的维度来保证同类事务的共同表现。