PHP面向对象(抽象类与抽象方法、接口的实现)

一、抽象类与抽象方法

1,任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。

2,定义为抽象的类不能被实例化。

3, 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

4,必须在子类中将抽象类的全部抽象方法全部实现才可以

<?php
// 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
abstract class Person // 定义为抽象的类不能被实例化。
{
  public $name;
  public function __construct($name)
  {
    $this->name = $name;
  }
  // 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
  abstract protected function hello();
  abstract protected function say();
  public function show()
  {
    return "我的名字:".$this->name;
  }
}
class Worker extends Person
{
  // 必须在子类中将抽象类的全部抽象方法全部实现才可以
  public function hello()
  {
    return ‘Hello ‘.$this->name;
  }
  public function say()
  {
    return ‘Say ‘.$this->name;
  }
}
$worder = new Worker(‘小明‘);
echo $worder->hello(); // Hello 小明
echo ‘<hr>‘;
echo $worder->say(); // Say 小明
echo ‘<hr>‘;
echo $worder->show(); // 我的名字:小明
?>

二、接口的实现

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

接口中定义的属性是类常量,定义的所有方法都必须是公有的抽象方法,所以public 、abstract 可不写,这是接口的特性。

<?php
interface Person1
{
  // 接口中定义的属性必须是:类常量
  const SITENAME = ‘我在学习PHP‘;
  // 接口中定义的所有方法都必须是公有的抽象方法,所以public 、abstract 可不写
  function show();
  function do();
}
interface Person2
{
  function hello();
}
// 接口不允许实例化,但可以被继承,创建一个类继承接口并实现所有的抽象方法
class Worker implements Person1,Person2
{
  public function show()
  {
    return self::SITENAME;
  }
  public function do()
  {
    return ‘我在写代码~~‘;
  }
  public function hello()
  {
    return ‘PHP是非常好的一种语言~~‘;
  }
}
$worker = new Worker();
echo $worker->show(); // 我在学习PHP
echo ‘<hr>‘;
echo $worker->do(); // 我在写代码~~
echo ‘<hr>‘;
echo $worker->hello(); // PHP是非常好的一种语言~~
?>

原文地址:https://www.cnblogs.com/dawuge/p/10480735.html

时间: 2024-11-05 21:58:24

PHP面向对象(抽象类与抽象方法、接口的实现)的相关文章

面向对象——抽象类和抽象方法

*概念 类中定义一些不含方法体的方法,它的方法体实现交给该类的子类根据自己的情况去实现,这样的方法就是抽象方法,包含抽象方法的类就是抽象类.抽象类能够被用于类,方法,属性,索引器和事件,使用abstract 在一个类声明中表示该类倾向要作为其它类的基类成员被标示成abstract,或被包含进一个抽象类,必须被其派生类实现. 抽象类通常代表一个抽象概念,它提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的,所以,在一个集成关系形成的等级结构里面,树叶节点应该是具体类,而树枝节点应该是抽

抽象类和抽象方法接口和多态

抽象类与普通类的区别: 1.抽象类中可以写抽象方法,普通类不可以: 2.抽象类不能直接创建对象,普通类可以: 3.抽象类中可以没有抽象方法,但是仍然不能创建对象. 抽象类的常见问题 1.抽象类一定是父类,因为是不断向上抽取而来. 2.实际开发中,建议先写抽象的父类,在根据具体的子类编写功能. 3.有抽象方法的类一定是抽象类,在抽象类中,可以没有抽象方法. 没有抽象方法的类是一种特殊的设计模式:(适配器模式) 4.如果抽象A定义了一个抽象的a方法,如果B类继承A的时候,没有重写a方法,B类也必须抽

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

面向对象 抽象类、接口、类库、五大原则

抽象类 抽象类,只为继承而出现,不定义具体的内容,只规定该有哪些东西一般抽象类中只放置抽象方法,只规定了返回类型和参数比如: 人    - 有吃饭,睡觉方法 男人 - 继承人抽象类,必须实现吃饭,睡觉的方法主体 女人 - 继承人抽象类,必须实现吃饭,睡觉方法的主体 抽象类中可以有普通属性,通过子类来使用 1.关键字:abstract2.抽象类可以包含抽象方法和普通方法3.abstract关键字可以定义方法为抽象方法,抽象方法可以没有函数体4.抽象类无法被实例化,抽象类主要做为一个基类,让别的类继

PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程

1.PHP中的抽象类 PHP 5 支持抽象类和抽象方法.定义为抽象的类不能被实例化.任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的.被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现.在类的声明中使用 abstract 修饰符可以将某个类声明为抽象的. 可以这样理解,抽象类作为一个基类,它把特定的细节留给继承者来实现.通过抽象概念,可以在开发项目中创建扩展性很好的架构. abstract class AbstractClass{   

python 之浅谈接口的定义和抽象类以及抽象方法

#_*_ coding:utf-8 _*_ #知识点:接口的定义和抽象类以及抽象方法 ''' 1.抽象类式啥? 抽象类加上抽象方法就等于接口 2.接口的定义 含义1.别人给你暴露一个URL,然后调用这个URL 含义2.定义一个规范,不写具体实现,按照这个规范去实现相关功能,抽象类就是属于这种 ''' from abc import  ABCMeta, abstractmethod #定义一个抽象类 class Alert:     __metaclass__ = ABCMeta     @abs

java面向对象- 抽象类和接口

一.final关键字: 1.final关键字在java中被称为完结器,表示最终的意思 2.final能声明类.方法.属性: 使用final声明的类不能被继承 使用final声明的方法不能被重写 使用fanal声明的变量变成常量,常量不可以被修改.变量变成常量时,一般使用大写,例如:final int AGE = 22; 二.抽象类: 1.包含一个抽象方法的类就是抽象类. 2.声明而未被实现的方法就是抽象方法.必须使用abstract声明. 3.抽象类被子类继承,不能直接对其进行实例化,必须通过其

C#中的继承 (继承、抽象类和抽象方法、接口)

最近在研究重构,所以对于类,接口这些研究的也比较多,然后看各种资料,只要我感觉到能学到东西,就记录下来,感觉是件有意义的事情. 一.继承 什么是继承:继承是允许重用现有类去创建新类的过程.分类的原则是一个类派生出来的子类具有这个类的所有非私有的属性.1.继承C#中的类:C#不支持多重继承,C#类始终继承自一个基类(如果未在声明中指定一个基类,则继承自System.Object).派生类继承基类的语法如下:using System;public class Person{//这是基类}public

php面向对象-抽象类与接口

一.抽象类与接口 1.抽象类:拥有抽象方法的类就是抽象类(没有抽象成员属性) 抽象方法:没有方法体的方法就是抽象方法 什么是没有方法体?没有花括号 所有抽象类和抽象方法都需要abstract关键字修饰 一个抽象类里面可以拥有多个抽象方法,也可以拥有多个非抽象方法 抽象方法不能被声明为私有 继承抽象类的时候,方法也要遵守3,2,1原则 继承抽象类的时候,方法体中的形参数量要和抽象方法保持一致 继承抽象类的时候,抽象方法中的形参如果有默认值,则实现的方法也要有默认值,值可以不一样. 抽象类可以拥有成