美文网首页
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