面向对象三大特征之【继承】,【多态】
//面向对象三大特性
//继承
//概念:子类可以继承父类的一切
//方法重写:在子类里面对父类的方法进行重写
//特点:单继承:一个子类只能有一个父类,一个父类可以派生出多个子类
//override: 重写
//overload: 重载,编程多态
//parent::值名(); 放到那个需要调用父类的值名里面的(值),的子类里面!
class Ren
{
public $name;
function say()
{
echo $this->name."正在讲话!";
}
}
class China extends Ren
{
public $dizhi;
function say()
{
parent::say(); //调用父类的say方法
echo "中国人说话";
}
}
class America extends Ren
{
function say()
{
echo "speak";
}
}
$c = new China();
$c->say();
$a = new America();
$a->say();
//面向对象三大特性
//多态(运行多态)
//概念:当父类引用指向子类实例,由于子类里面对父类的方法进行了重写,父类引用在调用该方法的时候表现出的不同状态。
//条件:1.必须发生在继承下
// 2.必须重写父类方法
// 3.父类引用调用改方法
//override: 重写:(前提:在继承的基础上,子类在获取了父类的结构以后,可以对父类中同名的方法进行“重构”)。方法的返回值,方法名,形参列表形同:权限修饰符不小于父类的同名方法;子类方法的异常类型不小于父类的;两个方法要同为{static}或同为非{static}。。
//overload: 重载,编程多态 “两同一不同”,“同一类”,同一个方法,不同的参数列表。注:方法的重载与方法的返回值无关,构造器是可以重载的。
//如果一个方法需要一个父类参数,可以给一个子类对象
//类:在PHP里不能用!但必须了解一下!
public class Ren
{
public virtual string Speak()
{
return "人在说话";
}
}
public class China:Ren
{
public override string Speak()
{
return "中国人在说话";
}
}
public class America : Ren
{
public override string Speak()
{
return "美国人在说话";
}
}
//多态:
Ren r = new Ren(); //造一个Ren类的引用指向Ren类的对象
Ren r1 = new America(); //父类引用指向子类实例
r1.Speak(); //表现出的不同,成为多态
//子类对象替父类例子
//怪兽吃人
public string Eat(Ren r)
{
return "人类真好吃";
}
America a = new America();
Eat(a);