`

PHP类实例教程(十七):abstract类和abstract方法

 
阅读更多

可以使用abstract来修饰一个类或者方法。

用abstract修饰的类表示这个类是一个抽象类,用abstract修饰的方法表示这个方法是一个抽象方法。

抽象类不能被实例化。

抽象方法是只有方法声明,而没有方法的实现内容。

abstract 抽象类

可以使用abstract来修饰一个类。

用abstract修饰的类表示这个类是一个抽象类。

抽象类不能被实例化。

这是一个简单抽象的方法,如果它被直接实例化,系统会报错。

下面例子的 NormalUser 继承自 User类,就可以被实例化了。

单独设置一个抽象类是没有意义的,只有有了抽象方法,抽象类才有了血肉。下面介绍抽象方法。

abstract 抽象方法

用abstract修饰的类表示这个方法是一个抽象方法。

抽象方法,只有方法的声明部分,没有方法体。

抽象方法没有 {} ,而采用 ; 结束。

一个类中,只要有一个抽象方法,这个类必须被声明为抽象类。

抽象方法在子类中必须被重写。

下面是一个抽象类,其中有两个抽象方法,分别是 setSal() 和 getSal()。用来取回 $sal 员工的工资。

既然User类不能被直接继承,我们写一个NormalUser类继承自User类。当我们写成如下代码时,系统会报错。 这个错误告诉我们,在 User类中有两个抽象方法,我们必须在子类中重写这两个方法。

下面例子,重写了这两个方法,虽然方法体里面 {} 的内容是空的,也算重写了这个方法。注意看重写方法的参数名称,这里只要参数数量一致就可以,不要求参数的名称必须一致。

下面19-21行,三种写重写的方式都会报错。

19行,缺少参数。

20行,参数又多了。

21行,参数类型不对。(这种写法在以后章节介绍)

一个类中,如果有一个抽象方法,这个类必须被声明为抽象类。

下面这个类不是抽象类,其中定义了一个抽象方法,会报错。

抽象类继承抽象类

抽象类继承另外一个抽象类时,不用重写其中的抽象方法。

抽象类中,不能重写抽象父类的抽象方法。

这样的用法,可以理解为对抽象类的扩展

下面的例子,演示了一个抽象类继承自另外一个抽象类时,不需要重写其中的抽象方法。

抽象类在被继承后,其中的抽象方法不能被重写。

如果发生重写,系统会报错。

抽象类继承抽象类,目的对抽象类的扩展。

在PHP5.1中,抽象类中支持静态抽象方法。下面这个例子,看到静态抽象方法可以声明。实现这个方法时,必须是静态的方法。

静态抽象方法

在PHP5.1中,抽象类中支持静态抽象方法。下面这个例子,看到静态抽象方法可以声明。实现这个方法时,必须是静态的方法。

分享到:
评论

相关推荐

    PHP100视频教程20:PHP面向对象开发的学习(四)

    首先,我们要理解**类**是对象的模板,它定义了一组属性和方法,这些属性描述了对象的状态,而方法则定义了对象的行为。在PHP中,我们可以使用`class`关键字来创建类。例如: ```php class Car { public $color; /...

    PHP100视频教程24:PHP面向对象开发的学习(八).rar

    5. **继承**:一个类可以继承另一个类的属性和方法,这样可以避免代码重复,提高代码的复用性。使用`extends`关键字实现继承。 6. **封装**:封装是将数据和操作数据的方法绑定在一起,形成一个独立的单元,以保护...

    PHP100视频教程22:PHP面向对象开发的学习(六).rar

    使用`abstract`关键字声明抽象类和方法。子类必须实现所有抽象方法才能被实例化。 **魔术方法**是PHP提供的一组特殊方法,如`__construct`(构造方法)、`__destruct`(析构方法)、`__get`和`__set`(用于访问私有...

    PHP100视频教程19:PHP面向对象开发的学习(三).rar

    PHP中的`abstract`关键字用于声明抽象类和方法,`interface`关键字用于定义接口。 此外,**访问修饰符**也是PHP OOP中不可忽视的部分。`public`成员对所有类可见,`private`成员只能在定义它们的类中访问,`...

    PHP100视频教程23:PHP面向对象开发的学习(七).rar

    - 继承允许一个类(子类)从另一个类(父类)继承属性和方法。这减少了代码重复,提高了代码的复用性。在PHP中,使用`extends`关键字实现继承。 5. **多态** - 多态性允许子类重写父类的方法,使得相同的方法名在...

    PHP100视频教程21:PHP面向对象开发的学习(五).rar

    在PHP中,类是创建对象的蓝图或模板,它定义了一组属性(Variables)和方法(Functions),这些属性和方法构成了对象的行为。例如,你可以创建一个名为"Person"的类,包含姓名、年龄等属性,以及说话、走路等方法。 ...

    php多态和抽象类,php教程

    抽象类是一种不能被实例化的特殊类,它通常用来作为其他类的基类,提供共同的属性和方法。在PHP中,使用`abstract`关键字声明一个类为抽象类,并可以定义抽象方法(没有方法体的方法)。子类继承抽象类时,必须实现...

    php面向对象(类)教程

    10. **静态成员**:在PHP中,`static`关键字可以用来声明静态属性和方法,它们不属于类的实例,而是属于类本身。这意味着无需创建对象即可访问它们。 通过学习以上知识点,你将能够更好地理解PHP中的面向对象编程,...

    PHP高级教程php详解

    对象是类的具体实例,可以访问类中的属性和方法。 3. 访问控制:PHP提供了public、private和protected三种访问修饰符。public属性和方法可以在任何地方访问,private仅限于本类内部,而protected允许子类访问。 4....

    PHP中文教程:面向对象编程的介绍

    2. **对象(Object)**:对象是类的实例,具有类定义的属性和方法。通过`new`关键字,我们可以根据类创建新的对象。 3. **封装(Encapsulation)**:封装是将数据和操作数据的方法绑定在一起,对外部环境隐藏内部...

    php ob PHP面向对象教程

    继承允许一个类(子类)从另一个类(父类)继承属性和方法。这提高了代码的复用性并简化了设计。在PHP中,使用关键字"extends"实现继承: ```php class Student extends Person { // 子类可以访问父类的公共和受...

    PHP5面向对象开发教程第一章-PHP5面向对象基础

    总结来说,PHP5的面向对象特性包括类、对象、继承、接口、抽象类和方法以及封装。通过这些概念,开发者可以构建出更加模块化、易于维护的代码结构。在实际开发中,理解和熟练运用这些基础概念对于提高PHP应用程序的...

    PHP5学习对象教程(CHM)

    6. **抽象类与抽象方法**:`abstract`关键字可以声明一个抽象类或方法,抽象类不能实例化,必须由其他类继承并实现其所有抽象方法。 7. **命名空间(Namespace)**:PHP5.3引入了命名空间,用于组织和避免全局作用...

    PHP面向对象之刀客教程01

    对象是类的实例,具有类中定义的属性和方法。例如,你可以创建一个名为`Person`的类,包含`name`和`age`属性,以及`sayHello`方法。 2. 封装:这是面向对象的核心特征之一,它隐藏了对象内部的实现细节,只对外提供...

    php5面向对象教程【技术文档】

    7. 抽象类(Abstract Class)与抽象方法:抽象类不能被实例化,只能作为其他类的基类。抽象方法没有实现,必须由子类提供。 ```php abstract class AbstractClass { abstract public function someAbstractMethod...

    php面向对象初步入门教程pdf版

    - **对象(Object)**: 对象是类的实例,具有类所定义的属性和方法。 - **封装(Encapsulation)**: 封装是将数据和操作这些数据的方法绑定在一起,形成一个独立的实体,对外只暴露有限的接口。 - **继承...

    php5学习对象教程

    1. 类(Class):类是创建对象的蓝图,定义了一组属性(成员变量)和方法(成员函数)。在PHP5中,我们使用`class`关键字来定义一个类,例如: ```php class MyClass { public $property; function __construct() ...

    PHP5面向对象开发教程第三章-PHP5面向对象高级类特性

    克隆后的对象是原始对象的一个副本,拥有与原始对象相同的属性和方法,但它们是独立的,改变其中一个不会影响另一个。 九、魔术常量 除了魔术方法,PHP还有一些预定义的魔术常量,如`__LINE__`(当前行号)、`__...

Global site tag (gtag.js) - Google Analytics