美文网首页
7.7 抽象类

7.7 抽象类

作者: 57fc17b7d598 | 来源:发表于2017-06-30 14:46 被阅读2次

    抽象类就是一个普通的类,区别是抽象类中申明了一些函数,这些函数的功能必须由子类来实现。

    抽象类不能实例化。

    任何一个类,只要其中有一个方法被定义为抽象的,那么这个类就必须是抽象的。

    抽象类中可以没有抽象方法,但这样就没有意义了。

    被定义为抽象的方法只能进行声明(如名称、参数、返回值),但不能有函数体。

    继承一个抽象类时,子类必须实现父类中的所有抽象方法,且这些方法访问级别必须和父类中一样或是级别更大。

    实现父类方法时,参数和返回值必须一致,允许增加有默认值的参数。

    // 抽象类
    abstract class Foo{
        // 抽象方法不能有函数体
        abstract protected function hello(int $i, string $s) : int;
        abstract protected function world(bool $b, float $f);
        abstract protected function temp(int $i);
        // 普通方法可以有函数体
        protected function fn(){
            echo "父类的普通方法<br />";
        }
    }
    
    // 子类
    class Bar extends Foo{
        // 参数必须和父类一样
        protected function hello(int $i, string $s) : int{
            echo "子类的hello方法 <br />";
        }
        // 访问级别可以更大、也可以增加一个有默认值的参数
        public function world(bool $b, float $f, int $i = 123){
            echo "子类的world方法 <br />";
        }
        // 子类的参数可以设置默认值
        public function temp(int $i = 123){
            // 子类实现的方法必须有函数体
        }
        // 普通方法重写
        public function fn(){
            echo "子类的普通方法<br />";
        }
    }
    

    相关文章

      网友评论

          本文标题:7.7 抽象类

          本文链接:https://www.haomeiwen.com/subject/qlzbcxtx.html