zoukankan      html  css  js  c++  java
  • php--抽象类abstract 关键字

    思考:在一个项目中,如果架构师在前面给定义了一些父类,而且希望所有的子类都遵循父类的设置,有没有什么办法可以限制呢?

    引入:理论上讲没有系统性的办法,能够严格去规范程序员必须怎么实现,但是大家如果都遵循规则的话,那么可以利用父类来强制规范子类必须

    完成要的的事情,这个时候需要用到抽象类。

      

    抽象类 Abstract【掌握】

    定义:抽象类使用abstract关键字修饰的类,表示该类只能被继承,不能被实例化

    1.基本的雨打:使用abstract关键字修饰类,并且抽象类不能被实例化

    <?php
    
    // 抽象类
    abstract class posen{
    
    }
    
    // 抽象类不能被实例化
    $s=new posen();      //Cannot instrance 不能初始化这个类    

    2.抽象类只能子类继承

    <?php
    
    // 抽象类
    abstract class posen{
    
    }
    
    // 抽象类不能被实例化
    // $s=new posen();      //Cannot instrance 不能初始化这个类    
    
    // 子类继承
    class man extends posen{    //无错误提示 代码正常运行
    
    }

    3.abctract 关键字还可以用来修饰方法(抽象方法),abstract修饰的方法不能有方法体,而且有抽象方法的类必须声明为抽象的类

    <?php
    
    // 抽象类
    abstract class posen{
    
        // abstract public function add(){ }  //报错 抽象方法不能有方法体{};
        // 定义抽象方法没有方法体
        abstract public function add();
        // 普通方法有方法体
        public function show(){
            
        }
    }
    
    class man{
        // abstract public function show(); //报错,abstract 方法 必须在抽象类中
    
    }

    4.抽象方法因为要被子类继承实现,所以不能使用private修饰(私有方法不会被继承)

    <?php
    
    // 抽象类
    abstract class posen{
    
        // abstract public function add(){ }  //报错 抽象方法不能有方法体{};
        // 定义抽象方法没有方法体
        abstract private function add();
        // 普通方法有方法体
        public function show(){
    
        }
    }
    
    class man extends posen{
        
    
    }
    
    $s=new man();
    $s->add();           //致命错误  抽象方法不能使用private修饰

    5.子类继承抽象类后,如果抽象类中有抽象方法,那么子类必须选择自己成为抽象类或这实现抽象方法(所有抽象方法)

    <?php
    
    // 抽象类
    abstract class posen{
    
    
        abstract public function add();
    
    }
    
    abstract class man extends posen{  //子类继承有抽象方法的类的时候,可以声明为抽象类,可以不用实现
        
    }
    
    class wman extends man{        //子类继承抽象类的抽象方法后,要吗实现抽象方法,要吗自己称为抽象类
    
        public function add(){              //实现父类posen中的抽象方法  报错解除
    
        }
    }

    总结:

      1.使用abstract修饰的类叫做抽象类

      2.抽象类不能被实例化,只能被继承

      3.因为抽象类无法被实例化,以你私有成员在类中没有实质意义(还需要额外提供受保护或这公有方法来实现访问)

      4.抽象类的目的是用来规范子类(通常比配抽象方法)

      5.abstract还可以修饰方法,称为抽象方法,抽象方法所在的类必须为抽象类,抽象发放不能有方法体

      6.有抽象方法的抽象被继承时子类要么自身是抽象类,要么实现所有抽象方法

  • 相关阅读:
    ACM 一种排序
    ACM Binary String Matching
    ACM 括号配对问题
    ACM BUYING FEED
    ACM 喷水装置(二)
    ACM 会场安排问题
    ACM 推桌子
    ACM 心急的C小加
    ACM 田忌赛马
    ACM 疯牛
  • 原文地址:https://www.cnblogs.com/xiaowie/p/12298660.html
Copyright © 2011-2022 走看看