php抽象类继承

php抽象类跟java、c++什么的就很相似了

php抽象类有以下几个特点:

1. 抽象类继承抽象类时,不能重写父类中的抽象方法

2. 非抽象类继承抽象类时,必须实现抽象类中的所有方法

3. 至少有一个抽象方法的类就是抽象类

下面我们用代码来简单演示一下

<?php

    /**
     * Person抽象类
     */
    abstract class Person{
        private $name='';
        private $age=0;

        /**
         * Person constructor.
         * @param $n
         * @param $a
         * 在php中,构造方法对大小写不敏感,person方法为Person类的构造方法
         */
        public function person($n,$a){
            $this->name=$n;
            $this->age=$a;
        }

        public function getName(){
            return $this->name;
        }
        public function getAge(){
            return $this->age;
        }

        /**
         * 定义抽象方法
         */
        abstract function country();

        public function PrintAll(){
            echo '姓名:'.$this->getName().'年龄:'.$this->getAge().'国籍:'.$this->country().'</br>';
        }
    }

    class China extends Person {
        /**
         * 非抽象类继承抽象类必须要实例化所有的抽象方法
         */
        function country(){
            return '中国';
        }
    }

    class USA extends Person {
    	/**
     	* 非抽象类继承抽象类必须要实例化所有的抽象方法
     	*/
    	function country(){
     	   return '美国';
    	}
    }

    /**
     * 进行实例化的时候,会自动调用父类的构造方法
     * 用printAll()方法来打印所有信息
     */
    $a=new China('hjj',20);
    $a->PrintAll();

    $b=new USA('jack',18);
    $b->PrintAll();
?>

这里我用了country()来作为Person类中的抽象方法,用China和USA类来继承Person类

因此China和USA类都必须实现country()方法

而在对象初始化的时候,会自动调用父类Person的构造方法

以下是运行结果:

顺便说一下,如果一个抽象类B继承了另一个抽象类A,然后类C继承了类B,那么类C将要实现抽象类A、B的所有抽象方法:

abstrct class A{ abstract function testA(); }

abstrct class B extends A{ abstract function testB(); }

class C extends B{ function testA(){ }        function testB(){ } }

猜你喜欢

转载自blog.csdn.net/qq_41297145/article/details/91948961