抽象类

<?php
/****
燕十八 公益PHP讲堂

论  坛: http://www.zixue.it
微  博: http://weibo.com/Yshiba
YY频道: 88354001
****/


/***
====笔记部分====
抽象类: 无法实例化
类前加 abstract, 此类就成为抽象类,无法实例化.


春秋战国时期,燕零七 飞行器专家,能工巧匠.

他写了一份图纸---飞行器制造术

飞行器秘制图谱
1: 要有一个有力的发动机,喷气式.
2: 要有一个平衡舵,掌握平衡

他的孙子问: 发动机怎么造呢?
燕零七眼望夕阳: 我是造不出来,但我相信后代有人造出来



总结:
类前加 abstract 是抽象类
方法前加 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
*/



// 到了明朝,万户用火箭解决了发动机的问题
abstract class Rocket extends FlyIdea {

    // 万户把engine方法,给实现了,不再抽象了
    public function engine() {
        echo '点燃火药,失去平衡,嘭!<br />';
    }

    // 但是万户实现不了平衡舵,
    // 因此平衡舵对于Rocket类来说,
    // 还是抽象的,
    // 类也是抽象的
}



/*
到了现代,燕十八亲自制作飞行器
这个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();




abstract class Car {
    public function run() {
        echo '滴滴';
    }
}


class qq extends Car {
}

$qq = new qq();

 

posted @ 2012-11-19 18:51  永不停歇  阅读(275)  评论(0编辑  收藏  举报