欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

面向对象基础

程序员文章站 2024-03-22 14:04:40
...

一、基本概念

  • 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();

上一篇: 笛卡尔树

下一篇: Reverse Integer