qintangtao

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/

 

<?php
/*************************************************************
面向对象三大特征:
        1、封装
        2、继承
        3、多态
**************************************************************/

/*--------------------------------------------------------------
封装:
        对于一个对象,对外界开发一个接口
        调用接口时,内部进行操作,不需要外界知道
        隐藏了内部的一些实现细节
权限修饰符:
        作用:用来说明 属性/方法的权限特点
        写在 属性/方法 前面
 三个修饰符:
        private         私有的,保护最严
        protected     保护的
        public           公共的,保护最松
 疑问?
        public   修饰的属性/方法,可以在哪儿访问?
                答:在任意位置都可以访问 类外
        protected 修饰的属性/方法,可以在哪儿访问?
                答: 不能在类外调用
                        在类内调用
                        和子类中调用
        private 修饰的属性/方法,可以在哪儿访问?
                答: 不能在类外调用
                        只能在类内访问
    
             private        protected      public
本类        V                   V                  V
子类        X                   V                  V
外部        X                   V                  V

    在Java中,如果public/private/protected都不写
默认friendly
    在PHP中,如果public/private/protected都不写
 默认public
---------------------------------------------------------------*/

class Human{
    private $money = 1000;
    //访问 $money 的接口
    public function getMoney(){
       return $this->money;
    }
    //有些函数不能被外界访问 只能在类的内部访问
    private function touchi(){
        echo '小时候偷吃了一块肉';
    }
}

$a = new Human();
echo $a->getMoney();


/*--------------------------------------------------------------
 继承:
语法:extends
    子类 extends 父类{
    }
注意点:
    1、子类 只能继承 一个父类
    2、public protected 可以继承,并拥有访问和修改的权限
    3、private 可以继承,但没有访问和修改的权限
    4、构造函数可以继承
    5、如果子类也声明构造函数,则父类构造函数被覆盖
    6、子类的方法可以访问父类非私有的属性
    7、父类的方法不能访问子类的属性
 
 构造方法的继承:
    new 子类();
    只会执行子类的构造方法;

重写:
    1、方法名 参数一样
    2、权限不变或扩大

  子类调用父类的方法:
    parent::方法名();
--------------------------------------------------------------*/
class Human{
    private $height=170;
    private $name='Human';
    public function __construct(){
        echo 'Human ............<br />';
    }
    public function cry(){
        echo $this->name,'  Cry............<br />';
    }
}

class Stu extends Human{
    private $name='Sut';
     public function __construct(){
         parent::__construct(); //当子类重写了父类的构造函数 要显示调用
        echo 'Stu ............<br />';
    }
    public function cry(){ //重写 覆盖[override]
        parent::cry(); // 调用父类函数
        echo $this->name,' Cry............<br />';
    }

    public function study(){
        echo 'good good study, day day up<br />';
    }
}

class Lawer extends Human{
    private $area = '经济案件';
    public function bianhu(){
        echo '当事人无罪<br />';
    }

}

$xiaozhang = new Stu();
$xiaozhang->cry();*/
/*
$zhoukou = new Human();
$zhoukou->cry();

$xiaozhang = new Stu();
$xiaozhang->study();
$xiaozhang->cry();

$lise = new Lawer();
$lise->bianhu();
$lise->cry();



/*--------------------------------------------------------------
多态:
    1、按php本身的特点,不检测类型,本身就是多态
    2、但是在PHP5.3以后,引入了对于对象类型的参数
        检测,注意:只能检测对象所述的类
 反思:
     1、只抽象的声明父类,具体的工作由子类对象
     来完成,这样不同的子类对象完成,有不同的
     特点
--------------------------------------------------------------*/

posted on 2012-11-10 22:25  qintangtao  阅读(253)  评论(0编辑  收藏  举报