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),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实 ...
随机推荐
- mysql-分页查询方案
一.直接使用limit最简单查询方法: , 在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引. 随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似: , 言 ...
- C 文件读写1
打开文件 fopen( ) 函数来创建或者打开文件,这个调用会初始化一个FILE 类型的对象. 原型 FILE *fopen( const char * filename, const char * ...
- Java编程思想学习(十六) 并发编程
线程是进程中一个任务控制流序列,由于进程的创建和销毁需要销毁大量的资源,而多个线程之间可以共享进程数据,因此多线程是并发编程的基础. 多核心CPU可以真正实现多个任务并行执行,单核心CPU程序其实不是 ...
- Rootkit Hacking Technology && Defence Strategy Research
目录 . The Purpose Of Rootkit . Syscall Hijack . LKM Module Hidden . Network Communication Hidden . Fi ...
- IPC机制
转:http://blog.chinaunix.net/uid-26125381-id-3206237.html IPC 三种通信机制 2012-05-13 17:23:55 最近看了,IPC三种通 ...
- TCP的那些事儿(上)
TCP的那些事儿(上) 原文链接:http://coolshell.cn/articles/11564.html TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面. ...
- 新浪微博客户端(31)-显示相册图片上的GIF标记
DJStatusPhotoView.h #import <UIKit/UIKit.h> @class DJPhoto; @interface DJStatusPhotoView : UII ...
- 新浪微博客户端(20)-集成MJRefresh
HomeViewController.m /** 集成下拉刷新控件 */ - (void)setupPullToRefreshView { __unsafe_unretained UITableVie ...
- 关于vue.js 组件的调用
包子初学vue.js,有很多不明白的地方还请大家多多指教,在组件的调用的时候,包子有点懵,因为感觉调用组件的方式非常的麻烦,每一个都要实例化,不过,通过不断询问大牛们,我找到了,动态加载组件的方法~~ ...
- 网站程序版本号信息也可能造成bd快照严重滞后
在a5上看到一篇“破解阿里云论坛的快照时间迷局 或涉足所有phpwind论坛”的文章,里面说到pw的一个版本信息导致了快照滞后的问题,这再次验证了之前那篇文章“时间戳造成快照滞后”的准确性. 如下图所 ...