php——15-面向对象之方法重载(overload)和方法重写(override)

版权声明:未经同意,不得随意转载转载 https://blog.csdn.net/lucky541788/article/details/82942563

方法重载(overload)

  • 重:重复、重叠的意思
  • 定义:在一个类定义中,可以编写几个同名的方法,但是只要它们的参数个数不同,Java就会将它们看做唯一的方法。简单来说,一个类中的方法与另一个方法同名,但是参数个数不同,这种方法称之为重载方法。
  • php中不支持方法重载,但是可以模拟类似java中的方法重载。
  • 所以一般不建议这样写,作为了解
<?php

class Person
{
    public function test()
    {
        //echo 'Person->test()<br>';
        //echo func_num_args() . '<br>';//获取方法调用的参数个数;

        $num = func_num_args();
        switch ($num) {
            case 0:
                echo '这是没有参数的调用<br>';
                break;
            case 1:
                echo '这是有1个参数的调用<br>';
                break;
            case 2:
                echo '这是有2个参数的调用<br>';
                break;
            default:
                echo '这是多个参数的调用<br>';
                break;
        }
    }

    /*
    在Java中实现方法重载
    public function test($a,$b){}
    */

}

$cc = new Person();
//$cc->test();//0
//$cc->test('bob', 'tom');//2
$cc->test();//这是没有参数的调用
$cc->test(1);//这是有1个参数的调用
$cc->test(1, 2);//这是有2个参数的调用
$cc->test(1, 2, 3);//这是多个参数的调用

方法重写(override)

  • 重:重新、继承的意思
  • 重写就是子类重写了父类的方法;
  • 子类中的覆盖方法不能使用比父类中被覆盖的方法更严格的访问权限;
  • 子类可以拥有与父类不同的参数数量;
  • 构造函数重写
  • 注意:父类是 public 子类也只能是 public,但是父类是 protected 子类可以是 public 也可以是protected,也就是说子类权限始终比父类松或是相等,不能严格于父类
class Father
{
    public $name;

    public function __construct($name = 'bob')
    {
        $this->name = $name;
    }

    public function test()
    {
        echo '我是父类的test方法<br>';
    }
    /*
    protected function t(){

    }
    */
}

class Son extends Father
{
    public $age;

    //构造函数重写
    function __construct($name = 'bob', $age = 22)
    {
        parent::__construct($name);
        $this->age = $age;
    }

    //普通函数重写
    public function test($text = '')
    {
        parent::test(); // TODO: Change the autogenerated stub
        echo "我是 $text 重写添加的方法" . '<br>';
    }

    /*
    //子类权限始终比父类松或是相等,不能严格于父类
    protected function t()
    {
        parent::t(); // TODO: Change the autogenerated stub
    }

    public function t()
    {
        parent::t(); // TODO: Change the autogenerated stub
    }
    */
}

$cc = new Son('john');
echo $cc->name . '<br>';//john
echo $cc->age . '<br>';//22
$cc->test('子类') . '<br>';//我是父类的test方法  //我是 子类 重写添加的方法

猜你喜欢

转载自blog.csdn.net/lucky541788/article/details/82942563