继承和多态

/*class Info
{
const p =10; //将某些常用的常量表示出来,出了类访问不到
public static $class; //定义为静态的
public $code;
protected $name;
private $sex;

static function Test() //静态方法
{
echo self::$class; //代表该类,调用自身类里边的静态成员
echo "jtff";
}
function Say()
{

echo self::$class; //普通方法里边可以调用静态成员
echo "hello";}

/*function __set($n,$y)
(
$this->$n = $y;
)*/


//2.继承:
//概念:如果一个类有子类,他会继承父类的一切东西,私有成员访问不到
//定义子类的时候需要加关键字:extends
//特点:单继承,一个儿子只能有一个父亲,一个类只能有一个父类
//如果父类中有构造函数,子类在实例化时要按照父类的标准来做
//子类对父类方法的重写,在子类中写一个同样的方法
//final: 用来修饰类,代表该类是一个最终类,无法被继承


/*class Test extends Info
{
public $birthday;

function Run()
{
echo "run";
}
function Say()
{
parent::Say(); //调用父类的say方法
echo "world<br>";
}
}
$t = new Test();
/*Info::$class = "0305";
$t->code = "p001";*/
/*$t->Say();
//$t->Run();
var_dump ($t);
echo Info::p;*/

//静态成员
//普通成员是属于对象的,不是属于类的,调用的时候用对象调用
//什么叫静态成员:属于类的不是属于每个对象的,
//定义静态成员由static关键字修饰
//静态方法里边无法调用普通成员,可以调用静态成员,使用关键字:self
//self代表该类,$this代表该对象

/*Info::$class = "0305"; //访问静态成员用::

echo Info::$class;
Info::Test();*/

 

class Ren
{
public $name;
public $sex;
function Say()
{
echo "hello";
}
function __tostring() //输出类里面的一些描述
{
return "这个类包含变量name和sex";}
function __clone() //对象克隆的时候自动执行
{
$this->name = "李四"; //$this指克隆出来的新对象

}
}
class China extends Ren
{
function Say()
{
echo "你好";
}
}

//多态
//当父类引用指向子类实例的时候,由于子类对父类函数进行了重写,导致了我们在使用该引用去调用相应方法表现的不同
//发生条件:1.必须要继承
//2.父类引用要指向子类的实例~~~~~~~~~~~~~
//2.子类必须对父类的方法进行重写

//$r = new Ren(); //代表Rene的引用

//$r1 = new China(); //代表China的引用

//函数重载
//条件:1.函数名必须相同;2.函数里面参数的个数不同,如果个数相同,类型不同也可形成重载

//__tostring()方法

//对象的克隆
$r = new Ren();
$r->name = "张三";
$r1 = clone $r; //clone克隆对象
var_dump($r1);

posted @ 2016-05-03 08:34  一枚小兵  阅读(109)  评论(0编辑  收藏  举报