面向对象的三大特性之继承和多态(20161025)

课外补充:

底层语言:C++ C# 直接操作硬件的语言

堆和栈

堆:没有规律的存储 地址

栈:有规律的存储 地址对应的值

值类型 引用类型 string object

<!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>
1025morningtest.php

因为PHP是弱类型语言,多态无法具体表现出来,所以用了C#语言操作,其代码如下:

 类:
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);
多态
原文地址:https://www.cnblogs.com/zsczsc/p/6119380.html