PHP抽象类:无法实例化
来源:互联网 发布:小绳淘宝 编辑:程序博客网 时间:2024/05/16 10:40
一、抽象类: 无法实例化
类前加 abstract, 此类就成为抽象类,无法实例化.
举例:
春秋战国时期,燕零七 飞行器专家,能工巧匠.他写了一份图纸---【飞行器制造术】
飞行器秘制图谱:
- 要有一个有力的发动机,喷气式.
- 要有一个平衡舵,掌握平衡
他的孙子问: 发动机怎么造呢?
燕零七眼望夕阳: 我是造不出来,但我相信后代有人造出来
// 燕零七的构想,当时的科技造不出来,即这个类只能在图纸化,无法实例化.// 此时这个类没有具体的方法去实现,还太抽象.// 因此我们把他做成一个抽象类abstract class FlyIdea { // 大力引擎,当时也没法做,这个方法也实现不了 // 因此方法也是抽象的 public abstract function engine(); // 平衡舵 public abstract function blance(); /*----------------------注意:抽象方法 不能有方法体,写到小括号就行了---------------------- 下面这样写是错误的(有方法体) public abstract function blance() { } Fatal error: Abstract function FlyIdea::engine() cannot contain body */} /*----------------------抽象类不能 new 来实例化----------------------下面这行是错误的$kongke = new FlyIdea();Cannot instantiate abstract class FlyIdea*/ // ------------1----------到了明朝,万户用火箭解决了发动机的问题----------------------abstract class Rocket extends FlyIdea { // 万户把engine方法,给实现了,不再抽象了 public function engine() { echo '点燃火药,失去平衡,嘭!<br />'; } // 继承自父类,但是万户实现不了平衡舵,(还有一个抽象方法) // 因此平衡舵对于Rocket类来说, // 还是抽象的, // 类也是抽象的 因此类加一个abstract} /*------------1----------到了现代,燕十八亲自制作飞行器----------------------这个Fly类中,所以抽象方法,都已经实现了,不再是梦想.*/ class Fly extends Rocket{ public function engine() { echo '有力一扔<br />'; } public function blance() { echo '两个纸翼保持平衡~~~'; } public function start() { $this->engine(); for($i=0;$i<10;$i++) { $this->blance(); echo '平稳飞行<br />'; } }} $apache = new Fly(); $apache->start();/*有力一扔两个纸翼保持平衡~~~平稳飞行两个纸翼保持平衡~~~平稳飞行两个纸翼保持平衡~~~平稳飞行两个纸翼保持平衡~~~平稳飞行两个纸翼保持平衡~~~平稳飞行两个纸翼保持平衡~~~平稳飞行两个纸翼保持平衡~~~平稳飞行两个纸翼保持平衡~~~平稳飞行两个纸翼保持平衡~~~平稳飞行两个纸翼保持平衡~~~平稳飞行*/ //有一个类是抽象的,但是里面的方法不是抽象的,能否new?/*但是 --- 即便全是具体方法,但类是抽象的,也不能实例化.*/abstract class Car { public function run() { echo '滴滴'; }} //$qq = new qq(); 不能实例化 //解决办法》》》继承class qq extends Car {} $qq = new qq();
总结:
类前加 abstract 是抽象类
方法前加 abstract 是抽象方法
抽象类 不能 实例化
抽象方法 不能有 方法体
有抽象方法,则此类必是 抽象类
抽象类,内未必有抽象方法
但是 --- 即便全是具体方法,但类是抽象的,
也不能实例化.
二、抽象类的意义
请看如下场景:
Facebook 多国语言欢迎页面
user登陆,有一个 c 字段,是其国家
当各国人登陆时,看到各国语言的欢迎界面
我们可以用面向过程的来做
$c = 'english'; if($c == 'china') { echo '你好,非死不可';} else if($c =='english') { echo 'hi,welcome';} else if($c == 'japan') { echo '搜达斯内';}
反思: 当facebook进入泰国市场时,
增加 else if ,扩展性很差
=====用面向对象来做======
让美国小组/中国开发组/斯蜜达开发组 来开发Welcome类
争执不下: echo 到底该中? 日? 韩?
说: 干脆在wel()方法里,判断一下? 没意义啊
abstract class Welcome { public abstract function wel();} // 这是首页的controller开发者//$wel = new Welcome();//$wel->wel();/*说:你们别争执了,我只知道,我要调用wel()方法,就是打招呼,你们显示什么语言和我无关.*/ /**经理说话:Welcome谁也不许动,各国开发小组开发自己的招呼类 另:为了首页的controller开发者便于调用,统一继承自welcome类**/ class china extends Welcome { public function wel() { echo '你好,非死不可,<br />'; }} class english extends Welcome { public function wel() { echo 'hi,welcome'; }} class japan extends Welcome { public function wel() { echo '搜达斯奈'; }} // 再看首页开发者 $c = 'english'; // china, japan$wel = new $c();$wel->wel(); /* 以后新增了泰国语,首页的开发者,根本无需改动只需要增加一个泰国的welcome类 就可以了. 所以有一些面向对象的介绍中,说面向对象的一个特点:可插拔特性 */
1 0
- PHP抽象类:无法实例化
- PHP 抽象类的实例
- 【已解决】C++实例化抽象基类的派生类仍报错:无法实例化抽象类
- Java抽象类实例化
- 抽象类不能实例化
- 抽象类的实例化
- 抽象类的实例化
- PHP面向对象编程--类的创建和对象实例化(类、对象、模块化、抽象)
- 学习使用php抽象类而写的一个实例
- 抽象类和接口的区别(php实例)
- PHP 接口和抽象类的区别实例
- 类无法实例化
- 抽象类可以没有抽象方法,不能被实例化
- java抽象类不能实例化&实践是检验真理的唯一标准
- java抽象类怎么实例化了
- 抽象类不只是不能实例化
- 为抽象类和接口实例化
- 不能实例化抽象类的浅尝
- 数据结构实验之栈三:后缀式求值
- HDU 1025:Constructing Roads In JGShining's Kingdom(LIS问题+二分)
- mysql union和union all用法
- udp传输大文件的一个例子
- 字节序
- PHP抽象类:无法实例化
- 基于动态代理仿写的一个类似XUtils 3.0的ioc注解模块
- loadrunner录制邮件系统中遇到的一些问题
- 【Android】【版本差异】启动模式
- ViewPager无限轮播,下方展示小点
- HDU-5807 Keep In Touch
- Nim博弈
- java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be
- muduo : TcpConnection