zoukankan      html  css  js  c++  java
  • 2019-07-23 类的继承和final关键字的应用

    我们称以存在的用来派生新类的类为基类,又称做父类,超类。由已存在的类派生出的新类称为派生类,又称为子类。从一个基类派生的继承称单继承,从多个基类派生的继承称为多继承。也就是说:一个类只能直接从一个类中继承数据

    那么,怎样实现继承呢?很简单,我们只需要照创建类的方法后跟一个单词extends 父类名即可。比如此刻我们已经有了一个父类,代码如下:

    class Preson{
        function say()
        {
            echo  "1";
        }
    }

    此时我们想继承这个类,怎么办呢?看下代码:

    class Student extends Preson{
        function sing()
        {
            $this->say();
        }
    }

    可以看到我们并没有在student这个类中并没有写say方法,但在sing方法中去调用了say方法,此刻我们去实例化student这个类后,再去调用sing方法,可以输出1。证明继承成功。

    $obj = new Student();
    $obj->sing();

     如果继承的子类中有和父类相同的方法名会怎么样呢?

    class Preson{
        function say(){
            echo "1";
        }
    }
    
    class Son extends Preson{
    
        function say(){
            echo "2";
        }
    }
    
    $obj = new Son();
    $obj->say();

    输出结果为2,可见子类的方法覆盖了父类的方法。如果父类不想被子类覆盖怎么办呢?

    class Preson{
        function say(){
            echo "1";
        }
    }
    
    class Son extends Preson{
    
        function say(){
            parent::say();
            echo "2";
        }
    }
    
    $obj = new Son();
    $obj->say();

    输出结果为12;我们在子类方法中加入parent::方法就可以让父类方法不被覆盖,继而在子类中延续和完善。

    final关键字

    这个关键字只能用来定义和定义方法 不能使用final这个关键字来定义成员属性,因为final是常量的意思,我们在PHP里定义常量使用的是define()函数,所以不能使用final来定义成员属性。

    使用final关键标记的方法不能被子类覆盖,是最终版本;

    如果还是上面的例子,我们在类前面加一个关键字final会怎么样呢?

    <?php
    //创建一个父类
    final class Preson{
        function say()
        {
            echo  "1";
        }
    }
    
    class Student extends Preson{
        function sing()
        {
            $this->say();
        }
    }
    
    $obj = new Student();
    $obj->sing();
    ?>

    显示结果会报错:Fatal error: Class Student may not inherit from final class (Preson) 。

  • 相关阅读:
    串口RS232和485通信的波形分析
    Ubuntu添加中文输入法
    虚拟机桥接模式联网方法,Xshell的连接与使用
    waitpid 函数详解
    linux for循环 fork() 产生子进程
    【LeetCode解题总结】动态规划篇
    【LeetCode解题总结】递归篇
    【LeetCode解题总结】排序篇
    【LeetCode解题总结】树/图篇
    【LeetCode解题总结】栈/队列篇
  • 原文地址:https://www.cnblogs.com/zhangxu-fasu/p/11233147.html
Copyright © 2011-2022 走看看