php抽象类的简单应用
抽象类也是面向对象中的重要概念,和接口、继承的概念重要性相当,在面向对象的开发中,所有的对象都是通过类来描述的,但是反过来,并不是所有类都是用来描绘对象的,广义上讲如果一个类中没有足够信息来描述一个具体的对象,这样的类就是抽象类。具体用简单的代码来实现:
abstract class ACanEat {
// 抽象方法需要在子类中实现
abstract public function eat($food);
public function breath(){
echo "Breath use the air.<br />";
}
}
// Human类继承了ACanEat抽象类
class Human extends ACanEat {
// 跟Animal类的实现是不同的
public function eat($food){
echo "Human eating " . $food . "\n";
}
}
// Animal类继承了ACanEat抽象类
class Animal extends ACanEat {
public function eat($food){
echo "Animal eating " . $food . "\n";
}
}
$man = new Human();
$man->eat("Apple");
$man->breath(); // 和Animal共用了抽象类ACanEat的breath方法
$monkey = new Animal();
$monkey->eat("Banana");
$monkey->breath();
从代码可以简单的看出,抽象类定义前面以abstract关键字开始,里面可以定义多个方法,可以具体实现,也可以定义为抽象方法,没有实现的方法需要设定为抽象方法,需要在最前面加abstract关键字,抽象方法需要在子类中实现,而普通方法子类可以不用重写,对象可以直接使用。
上面代码中,Human类和Animal类都继承了ACanEat抽象类,通过各自不同的方法实现了eat,但是两个类继承了相同的方法breath,这个属性可以认为是相同的,无论实例化哪个对象都可以使用相同的breath方法
所以,抽象类其实就是介于普通类和接口之间的一个类,普通类需要实现所有方法,接口所有方法都不需要实现,而抽象类可以根据自己的需要去选择实现部分方法;但是一旦类里面有抽象方法,这个类就必须是抽象类,另外注意,抽象类跟接口一样,不能直接实例化为对象,只能被普通类继承,,其实抽象类同样体现了面向对象的多态现象
php抽象类的简单应用的更多相关文章
- 【转】C#类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)
静态类 -------------------------------------------------------------------------------- 静态类就是在class关键字前 ...
- php中的抽象方法和抽象类,简单明了,一点通
1.什么是抽象方法? 我们在类里面定义的没有方法提的方法就是抽象方法.所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时方 ...
- Java 抽象类的简单使用
自己做的一点笔记... 抽象类:使用关键词 abstract 进行修饰,抽象类不能生成对象(实例化),且含有抽象方法(使用 abstract 进行声明,并且没有方法体). 特点: 1️⃣ 抽象类不一 ...
- c#接口与抽象类的区别
abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的: 抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误.虽然一些变量和值在编 ...
- C#接口和抽象类的区别
大家都容易把这两者搞混,我也一样,在听李建忠老师的设计模式时,他也老把抽象类说成接口,弄的我就更糊涂了,所以找了些网上的资料. 一.抽象类: 抽象类是特殊的类,只是不能被实例化:除 ...
- C#高级编程笔记 Day 3, 2016年9月 8日 抽象类
1.虚方法:把一个基类函数声明为 virtual,就可以在任何派生类中重写该函数. 2.在Java 中所有函数都是虚拟的,但是在C# 中,C# 要求在派生类的函数重写另一个函数时,要使用 overri ...
- C#中抽象类和接口
下面是我做的测试: using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...
- Java中的接口与抽象类
抽象类很简单,就是多了个abstract关键字,可以有(也可以没有)只声明不定义的方法.不能实例化该类. 接口比较特殊: 无论你加不加public,接口中声明的方法都是public的,还有无论你加不加 ...
- 抽象类 接口 虚函数(C++模拟,个人见解)
1.抽象类里面可以有非抽象方法但接口里只能有抽象方法声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实 ...
随机推荐
- Java设计模式-享元模式(Flyweight)
享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用. FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查 ...
- 你也可以当面霸-Servlet与JSP的原理及特点
既然是面试系列,就是面试官和应聘者之间的对话.本文是采用一问一答的形式呈现给读者的,这样能有一个明确的考察点,不像理论知识那么枯燥. 01.什么是Servlet技术 Servlet是和平台无关的服务器 ...
- 【CodeForces 622A】Infinite Sequence
题意 一个序列是, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5....这样排的,求第n个是什么数字. 分析 第n个位置属于1到k,求出k,然后n-i*(i-1)/ ...
- ZOJ 3430 Detect the Virus
传送门: Detect the Virus ...
- 编译java文件,出错:Failed to establish a connection with the target VM
helloword程序,所有java学习人员人生第一个程序,哎妈,基础太差,出错 public class Helloword{ public Helloword() { public static ...
- POJ2676Sudoku(类似于八皇后)
Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16444 Accepted: 8035 Special ...
- js div浮动层拖拽效果代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- zabbix: failed to accept an incoming connection
错误描述 查日志发现: failed to accept an incoming connection: connection from "192.168.186.132" rej ...
- WAF绕过的技巧
研究过国内外的waf.分享一些绝技. 一些大家都了解的技巧如:/*!*/,SELECT[0x09,0x0A-0x0D,0x20,0xA0]xx FROM 不再重新提及. 以下以Mysql为例讲述这些技 ...
- php-5.3 zend opcache 的设置
故障现象,修改了代码上传到生产服务器之后,需要等待60秒才生效. 细查了一下,是opcache引起的,默认是60秒.于是我给关了,之前是ea加速,现在新版本的php好像用这个opcache了:; 2s ...