课外补充:
底层语言:C++ C# 直接操作硬件的语言
堆和栈
堆:没有规律的存储 地址
栈:有规律的存储 地址对应的值
值类型 引用类型 string object
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <body> <?php //面对对象三大特性 //封装 //目的:让类更安全 //做法:成员变量变为私有的,通过方法来间接操作成员变量,在方法里面加限制条件 //继承 //概念:子类可以继承父类的一切 //方法重写:在子类里面对父类的方法进行重写 //特点:单继承:一个子类只能有一个父类,一个父类可以派生出多个子类 //override:子类对父类的重写 //overload:子类对父类的重载,编译多态 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.父类引用调用该方法 //如果一个方法需要一个父类参数,可以给一个子类对象 //可以用子类对象替换父类 //父类引用不同的指向子类实例,呈现出不同的多态 ?> </body> </html>
因为PHP是弱类型语言,多态无法具体表现出来,所以用了C#语言操作,其代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
类: 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);