9.08 笔记-抽象类与接口与多态

来源:互联网 发布:python 周期性任务 编辑:程序博客网 时间:2024/05/22 01:53
抽象类与接口与多态
一、抽象类(重点)
    1. 只要包含抽象方法的类 就是抽象类
    2. 抽象类也必须加abstract修饰
    3. 抽象类不能直接实例化
    4. 抽象类需要被继承 实现所有抽象方法才能使用
    5. 如果有任何一个抽象方法没有被实现,那么这个类也必须是抽象类
    例程:
    //抽象类声明方法,抽象类必须被继承
    //抽象方法一般只写声明, 继承的子类写实现方法
        abstract class A{
            public function eat(){
            echo '抽象类里可以写实现方法';
        }
    //抽象类写方法声明后,子类必须被重写;
    //没有实现方法子类必须要重写
        abstract public function show();
        }
        class B extends A{
            public function show(){
                echo '子类必须重写 show 函数';
            }
        }
    $obj = new B();
    $obj->show();


二、抽象方法
    1. 没有方法体的方法
    2. 必须使用abstract修饰
    3. 抽象方法需要被重写
    4. 重写了所有抽象方法的类才算一个完整的类 可以被实例化
三、 抽象与抽象方法的作用
    就是在企业中制定规范使用!
四、 接口
    1. 定义格式
    interface 接口名{
        [常量]
        [抽象方法]
    }
    2.  特性
        a.在接口里面 所有的方法都是抽象方法 不需要额外修饰
        b.接口与接口之间是 继承关系
        c.类与接口之间 是实现关系(implements)
        d.实现 接口可以多实现  中间用逗号隔开
        e.类在继承其他类的同时 可以实现接口(多实现)
    3. 作用
        制定规范使用
    4. 与抽象类的差异
        如果单纯的用于指定规范 两种都可以
        但是如果在制定规范的同时 要共享一些公用方法 只能用抽象类
    例程:


        //接口定义
        interface USB{
            //接口只能写声明方法
            //注意接口不能写实现方法;
            //abstract抽象类就可以有实现方法
            public function run();
        }


        //接口与接口之间是 继承关系
        interface PS2 extends USB{


            public function move();


        }


        class A{}
        //类与接口之间 是实现关系
        //实现 接口可以多实现 中间用逗号隔开
        //类在继承其他类的同时 可以实现接口(多实现)


        class Mouse extends A implements PS2 {


            public function run(){
                // 接口中的声明的函数必须被重写
            }


            public function move(){
                //写实现方法
            }
        }
五、多态
    a)  多态: 不同的对象做相同的事情得到不同的结果


        class MeiZi{
                public function  meet($obj){
                    $obj->ber();
                }


            }
            //制定规范
            abstract class Hanzi{
                abstract public function ber();
            }


            //DDS类
            class DDS extends Hanzi{
                public function ber(){
                    echo '啪';
                }
            }




            //GFS 类
            class GFS extends Hanzi{
                public function ber(){
                    echo '啪啪啪';
                }
            }


            //实例化对象


            $girl = new MeiZi;


            $xds = new DDS;


            $girl->meet($xds);
            echo '<hr/>';
            $girl->meet( new GFS );