PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

php抽象类的作用是什么

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼 原创
2019-08-28 13:27:26 5240浏览

1、什么是抽象方法?

我们在类里面定义的没有方法体的方法就是抽象方法。所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时方法还要加一个关键字"abstract"来修饰。

例如: 

abstract function fun1(); 
abstract function fun2();

2、什么是抽象类?

只要一个类里面有一个方法是抽象方法,那么这个类就定义为抽象类,抽象类也要使用“abstract”关键字来修饰;在抽象类里面可以有不是抽象的方法和成员属性,但只要有一个方法是抽象的方法,这个类就必须声明为抽象类,使用“abstract”修饰。

相关推荐:《PHP教程

例如:

abstract class Demo
{ 
    var $test; 
    abstract function fun1();
    abstract function fun2(); 
    function fun3(){
        ...
    }
}

3、抽象类有什么作用?

上例子中定义了一个抽象类“demo”使用了“abstract”来修饰,在这个类里面定义了一个成员属性"$test",和两个抽象方法“fun1”和“fun2”还有一个非抽象的方法fun3();

那么抽象类我们怎么使用呢?最重要的一点就是抽象类不能产生实例对象,所以也不能直接使用,前面我们多次提到过类不能直接使用,我们使用的是通过类实例化出来的对象。

那么抽象类不能产生实例对象我们声明抽象类有什么用呢?我们是将抽象方法作为子类重载的模板使用的,定义抽象类就相当于定义了一种规范,这种规范要求子类去遵守,子类继函抽象类之后,把抽象类里面的抽象方法按照子类的需要实现。子类必须把父类中的抽象方法全部都实现,否则子类中还存在抽象方法,那么子类还是抽象类,还是不能实例化对象;

为什么我们非要从抽象类中继承呢?因为有的时候我们要实现一些功能就必须从抽象类中继承,否则这些功能你就实现不了,如果继承了抽象类,就要实现类其中的抽象方法;

例如:

<?
abstract class Demo
{
    var $test; 
    abstract function fun1();
    abstract function fun2(); 
    function fun3() {
        ...
    }
} 
$demo=new Demo(); //抽象类不能产生实例对象,所以这样做是错的,实例化对象交给子类
 
class Test extends Demo
{
    function fun1() {
        ...
    } 
    function fun2() {
        ...
    }
} 
$test = new Test(); //子类可以实例化对象,因为实现了父类中所有抽象方法
?>

4、抽象类的特点:

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

抽象类不一定有抽象方法,有抽象方法的类,一定是抽象类。

抽象方法的可见性不能是private。

抽象方法在子类中,需要重写。

5、什么时候需要用抽象类?

有个方法,方法体不知如何写,子类中还必须有这个方法时,封装成抽象方法,类为抽象类。

控制子类中必须封装某些方法时,可以用抽象方法。

当需要控制类只能被继承,不能被实例化时。

6、接口

如果一个类中,所有的方法都是抽象方法,且没有成员属性,则这个类被称为接口(interface)。

interface Common{
    abstract function work();
    abstract function test($args);
}

接口的继承(extends):

接口继承接口   interface 接口名称 extends 父接口名称

注意:类的继承是单继承(只能有一个父类),但接口的继承却是多继承,类对接口的实现也是多实现。

接口的实现(implements):

类实现接口      class 类名 implements 接口名称1,接口名称2, ...

继承类同时实现接口:

类继承父类同时实现接口    class 类名 extends 父类名 implements 接口名称

7、抽象类和接口的区别

接口是一种特殊的抽象类,接口中只包含抽象方法,没有成员属性。类实现(implements)接口时,必须完全实现接口中的所有方法;

类继承(extends)抽象类时,只需对需要用到的抽象方法进行重写。抽象类只能单继承,但接口却是多继承,类对接口的实现也是多实现。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。