美文网首页
面向对象基础

面向对象基础

作者: yzw12138 | 来源:发表于2017-12-04 21:18 被阅读0次

    一、基本概念

    • 1、对象: 对象是一切客观存在的实体;一个对象由一组属性和对这组属性进行的操作组成;客观世界由对象和对象之间的联系组成。
    • 2、类:具有相同属性和行为的对象的抽象就是类。
    • 3、类和对象的关系:类的实例是对象,对象的抽象是类;类描述的是一组具有相同属性和行为的对象。

    二、面向对象的特征

    • 1、封装:将客观事物封装成抽象的类,并且类中的数据和方法只让可信赖的类或对象进行操作,提高了安全性;良好的封装能减少耦合;封装的原则在软件上反应是:要求使对象以外的部分不能随意的访问对象内部的数据。
    • 2、继承:将多个具有相同属性和方法的类,高度抽象出一个拥有共性的父类,相同的部分直接从父类中继承,个性在本类中体现。
    • 3、多态:一个类实例的相同方法在不同情形有不同表现形式.
            /**
             * Animal是Cat的父类,在实例化过程中可以有不同的及结果
             */
            Animal a=st.new Cat();
            Cat c=st.new Cat();
    

    原理:当方法被调用时,无论对象是否被转化为其父类,都只有位于对象继承链最末端的方法实现会被调用。

    • 子类以父类的身份出现,比如:儿子代表老子表演,化妆后就是以父亲身份出现了
    • 子类在工作时要以自己的方式来实现,比如:儿子模仿得再好,那也是模仿,儿子只能用自己理解的方式去模仿父亲的作品。
    • 子类以父类的身份出现时,子类特有的属性和方法不可以使用。比如:儿子代表父亲出演,绝活是不能表示出来的。

    三、抽象类

    • 1、抽象方法:没有函数体的方法就是抽象方法,由关键字abstract修饰。
    • 2、抽象类:由关键字abstract修饰的类为抽象类,抽象类里可以有不是抽象的属性和方法,但是只要有一个方法时抽象方法,该类就必须生命为抽象类。
    • 3、抽象类特点:
      1)抽象方法一定在抽象类中;
      2)抽象类不能直接通过new来创建对象;
      3)子类继承抽象父类时,必须实现父类中的所有抽象方法;
      4)抽象类是一个抽象的概念,必须通过继承来实现;
    abstract class AbstractDemo{
        var $test1;
        abstract var $test2;
        abstract function fun1();
        abstract function fun2();
        function fun3(){
            ......
        }
    }
    //抽象类不可以直接被实例化,里面的抽象方法没意义
    $ad = new AbstractDemo();
    class Demo extends AbstractDemo{
        function fun1(){
            ......
        }
        function fun2(){
            ......
        }
    }
    //子类继承抽象类,并实现其中的所有抽象方法后才可以被实例化
    $de = new Demo();
    

    四、接口

    接口是方法的抽象,如果不同的类中有相同的方法可以使用接口

    • 由关键字interface修饰
    • 接口可以定义常量,但不可以声明变量;
    • 接口中的方法必须是抽象方法
    • 一个类只可以继承一个抽象类或普通的类,但可以继承多个接口;
    interface InterfaceDemo{
        //定义一个常量
        const co = 'value';
        //接口中的方法都是抽象方法,可以省略“abstract”关键字
        function fun1();
        public function fun2();
    }
    class Demo extends class1 implements interface1,interface2,... {
        //实现接口中的所有方法后才可以被实例化
        ... ...
    }
    

    抽象类和接口关系

    • 接口没有构造函数,抽象类可以有构造函数;
    • 接口中的方法都是由public修饰,抽象类中可以用public、protect或private来修饰;
    • 从设计角度讲,抽象类是从子类中发现了公共东西,泛化出父类,然后子类继承,而接口是根本不知子类的存在,方法如何实现还不确认,预先定义。

    五、静态

    • 由static关键字修饰;
    • 用static修饰的属性或方法,可以不用实例化而直接访问;
    • 静态属性只能赋值Wie常量或文字;
    • 伪变量$this不可以在静态方法中使用;
    class StaticDemo{
        static $st = 'name';
        $st1 = 'name1';
        static function fun1(){
            ......
        }
        function fun2(){
            ......
        }
    }
    //直接通过类名来访问静态成员
    StaticDemo::$st;
    StaticDemo::fun1();
    $sd = new StaticDemo();
    $sd->st1;
    $sd->fun2();
    

    相关文章

      网友评论

          本文标题:面向对象基础

          本文链接:https://www.haomeiwen.com/subject/gudtixtx.html