php--抽象类abstract 关键字

思考:在一个项目中,如果架构师在前面给定义了一些父类,而且希望所有的子类都遵循父类的设置,有没有什么办法可以限制呢?

引入:理论上讲没有系统性的办法,能够严格去规范程序员必须怎么实现,但是大家如果都遵循规则的话,那么可以利用父类来强制规范子类必须

完成要的的事情,这个时候需要用到抽象类。

  

 

抽象类 Abstract【掌握】

定义:抽象类使用abstract关键字修饰的类,表示该类只能被继承,不能被实例化

1.基本的雨打:使用abstract关键字修饰类,并且抽象类不能被实例化

<?php

// 抽象类
abstract class posen{

}

// 抽象类不能被实例化
$s=new posen();      //Cannot instrance 不能初始化这个类    

2.抽象类只能子类继承

<?php

// 抽象类
abstract class posen{

}

// 抽象类不能被实例化
// $s=new posen();      //Cannot instrance 不能初始化这个类    

// 子类继承
class man extends posen{    //无错误提示 代码正常运行

}

3.abctract 关键字还可以用来修饰方法(抽象方法),abstract修饰的方法不能有方法体,而且有抽象方法的类必须声明为抽象的类

<?php

// 抽象类
abstract class posen{

    // abstract public function add(){ }  //报错 抽象方法不能有方法体{};
    // 定义抽象方法没有方法体
    abstract public function add();
    // 普通方法有方法体
    public function show(){
        
    }
}

class man{
    // abstract public function show(); //报错,abstract 方法 必须在抽象类中

}

4.抽象方法因为要被子类继承实现,所以不能使用private修饰(私有方法不会被继承)

<?php

// 抽象类
abstract class posen{

    // abstract public function add(){ }  //报错 抽象方法不能有方法体{};
    // 定义抽象方法没有方法体
    abstract private function add();
    // 普通方法有方法体
    public function show(){

    }
}

class man extends posen{
    

}

$s=new man();
$s->add();           //致命错误  抽象方法不能使用private修饰

5.子类继承抽象类后,如果抽象类中有抽象方法,那么子类必须选择自己成为抽象类或这实现抽象方法(所有抽象方法)

<?php

// 抽象类
abstract class posen{


    abstract public function add();

}

abstract class man extends posen{  //子类继承有抽象方法的类的时候,可以声明为抽象类,可以不用实现
    
}

class wman extends man{        //子类继承抽象类的抽象方法后,要吗实现抽象方法,要吗自己称为抽象类

    public function add(){              //实现父类posen中的抽象方法  报错解除

    }
}

总结:

  1.使用abstract修饰的类叫做抽象类

  2.抽象类不能被实例化,只能被继承

  3.因为抽象类无法被实例化,以你私有成员在类中没有实质意义(还需要额外提供受保护或这公有方法来实现访问)

  4.抽象类的目的是用来规范子类(通常比配抽象方法)

  5.abstract还可以修饰方法,称为抽象方法,抽象方法所在的类必须为抽象类,抽象发放不能有方法体

  6.有抽象方法的抽象被继承时子类要么自身是抽象类,要么实现所有抽象方法

 

posted @ 2020-02-12 13:02  WhiteSpace  阅读(525)  评论(0编辑  收藏  举报