abstract -- 抽象类

<?php

/**

*要充分发挥抽象类的特点,就必须牢记以下规则:

*某个类只要包含至少一个抽象方法就必须声明为抽象类

*声明为抽象的方法,在实现的时候必须包含相同的或者更低的访问级别。例如,如果某个方法在抽象类中的访问级别是受保护的,在继承中它就必须是受保护的或者公共的,而不能是私有的。

*不能使用new关键字创建抽象类的实力。

*被声明为抽象的方法不能包含函数体。

*如果将扩展的类也声明为抽象的,在扩展抽象类时,就可以不用实现所有的抽线方法。在创建具有层次结构的对象时,这种做法很有用的。

*/

//在类的声明中使用abstract修饰符就可以将某个类声明为抽象的。

//下面的代码中定义了一个抽象类,其中包含了一个具有完整实现的方法和一个将在继承类中实现的抽象方法。

/* 定义一个抽象基本类 */

abstract class Car {

//任何基类方法

abstract function getMaximumSpeed(); //不用出现方法体

}

//这个类是抽象的,不能实例化。要获得一个实例化,首先必须扩展它。

//创建一个从 Car 类继承的名 FastCar 的类,并且定义一个getMaximumSpeed() 方法。

/* 继承抽象类 */

class FastCar extends Car {

function getMaximumSpeed() {

return 150;

}

}

//有一个可以实例化的类 FastCar.

//下一步,可以创建另外一个类 Street ,它将用到抽象类提供的公共功能。

/* 使用抽象类提供的公共功能 */

class Street {

protected $speedLimit;

protected $cars;

public function __construct($speedLimit = 200) {

$this->cars = array(); //对变量进行初始化

$this->speedLimit = $speedLimit;

}

public function isStreetLegal($car) {

if($car->getMaximumSpeed() < $this->speedLimit) {

return true;

} else {

return false;

}

}

public function addCar($car) {

if($this->isStreetLegal($car)) {

echo ‘The Car was allowed on the road.‘;

$this->cars[] = $car;

} else {

echo ‘The Car is too fast and was not allowed on the road.‘;

}

}

}

//Street 类包含了一个 addCar() 方法,作用是获得一个派生的 Car 类的实力。

//现在,可以是使用 Street 类,并且向 addCar() 方法传入一个 FastCar 类的实例。 //addCar() 方法调用了 isStreetLegal() 方法,而这个方法将会调用定义在 FastCar 类中的 getMaximumSpeed() 方法。

$street = new Street();

$street->addCar(new FastCar());  //The Car was allowed on the road.

//使用抽象类,我们就可以确定所有继承自Car的对象都会实现getMaximumSpeed()方法,从而共享这个公共的功能。如果继承子Car的类没有定义这个方法,就会导致语法错误,程序也就不会运行。这种限制确保了在实例化层次上的兼容性,这样我们就不需要在发生错误了之后调试代码以找出某个对象没有宝华特定方法的原因了。

//然而,抽象类也有一些限制。PHP 只支持从一个基类继承,而不支持从两个或者更多的抽象类继承。从两个或更多的基类继承的能努力通常被称为多重继承,PHP在设计上是禁止这种功能的。原因在于,当两个或更多的类定义了具有相同原型且完整实现的方法时,从多个类继承会导致不必要的复杂性。当发现需要从两个或更多抽象类继承时,可以将基类的方法拆开,然后使用接口达到相同的目的。

时间: 2024-10-13 01:29:32

abstract -- 抽象类的相关文章

final 和 abstract 抽象类

摘录 一. final修饰的类 不能被继承了  :因为是最终的类了  所有不能被继承 final修饰的方法 不能被重写了 :因为是最终的方法了 所有不能被重写了 二. 1.从定义上讲,用abstract关键字来修饰一个类时,这个类叫做抽象类,方法亦然2.含有抽象方法的类,必须被声明为抽象类.抽象类中不一定具有抽象方法3.抽象类中可以定义有具体实现的方法4.抽象类不能被实例化 抽象方法只需声明 不必实现5.子类继承父类的过程中,如果父类为抽象类,那么子类必须实现父类的抽象方法,否则子类必须声明为抽

abstract抽象类的应用

/* * 示例: * 需求:公司中程序员有姓名,工号,薪水,工作内容. * 项目经理有姓名,工号,薪水,奖金,工作内容. * 对给出需求进行数据建模 * * * 分析 * 在这个问题领域中,先给出涉及的对象 * 通过名词提炼发. * 程序员:姓名,工号,薪水 * 行为:工作 * 项目经理:姓名,工号,薪水,奖金 * 行为:工作 * * 经理与程序员不存在直接继承关系(经理不是程序员) * 但程序员和经理有共性内容 * 可以将程序员和经理进行抽取,建立体系 */abstract class Emp

Java之关键字abstract(抽象类与抽象方法)

/* * abstract关键字的使用 * 1.abstract:抽象的 * 2.abstract可以用来修饰的结构:类.方法 * * 3. abstract修饰类:抽象类 * > 此类不能实例化 * > 抽象类中一定有构造器,便于子类实例化时调用(涉及:子类对象实例化的全过程) * > 开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作 * * * 4. abstract修饰方法:抽象方法 * > 抽象方法只有方法的声明,没有方法体 * > 包含抽象方法的类,一

Abstract抽象类 &amp;&amp; Interface接口

# 抽象类 ## 将相同的但是不确定的动作提取出来,抽象化,抽象类的意义在于,在子类中进行实现. ## 抽象类可以被继承,子类继承抽象类时,需要对抽象方法进行完全实现. ## 抽象方法不能有方法体. ## 抽象类中可以没有抽象方法. ## 当类中包含抽象方法时,该类必须是抽象方法. # 接口 ## 接口可以有多个方法,但是不能实现. ## 接口无法被实例化,但是可以被实现. ## 一个实现接口的类必须实现接口中所描述的所有的方法,否则声明问抽象类. ## 接口没有构造函数,接口不能包含成员变量,

2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理

package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class TemplateThread { //如果这个方法不想被子类或者别人随意改动[这样子类就不能覆写该方法了],这里方法就要设置为final方法 public final void println(String message){ System.out.println("###################

PHP接口(interface)和抽象类(abstract)

interface 定义了一个接口类,它里面的方法其子类必须实现.接口是类的一个模板,其子类必须实现接口中定义的所有方法. interface User{ function getHeight($height); function getWeight($weight); } class my implements User{ function getHeight($username){ echo $height; } function getWeight($weight){ echo $weig

浅谈php 抽象类abstract和接口interface

一.抽象类(abstract) 抽象类定义的规范 1.php5支持抽象类和抽象方法 2.定义得抽象类无法被实例化 3.任何一个类里面声明了抽象方法,那么这个类必须声明为抽象类 4.被定义得抽象方法只能声明其调用方式(参数),不能定义其具体得功能实现 5.继续抽象类的子类必须定义父类(抽象类)所有的抽象方法,并且访问控制(public.protected)必须一致,或者更为宽松 如:父类protected,子类可以protected.public.父类是public,那么子类就只能是public,

接口与抽象类

首先声明,本文基本参考自 http://dev.yesky.com/436/7581936.shtml 加入从其他资料中获得的观点. 1从逻辑上说 抽象类描述了一系列"东西"的本质. 接口描述一系列"东西"应该具有的功能,或者说接口就是一组契约. 在oop的观点里,世界上任何实物都能在思想的角度给一个类与之配对,但反过来说,并不是思想中所有的类都能在现实世界里找到一个实物配对.(这里说的思想里的类 也是个逻辑概念 包括普通的类也包括抽象类 接口等等) 举个例子,我们

php面向对象之抽象类

抽象关键字:abstract 定义:一个类中至少有一个抽象方法,我们称之为抽象类,所以抽象类是以抽象方法为基础的,要定义抽象类首先定义抽象方法. abstract class person{ abstract function name(); ....... } 1.抽象类中必须有一个抽象方法 2.抽象方法不可以加{} 3.抽象方法前面要加abstract 抽象类的特点: 1.抽象类不能被实例化,只能被继承. 2.继承的派生类中要把所有的抽象方法重载才能被实例化.