📌  相关文章
📜  网络技术问题 | PHP测验 |第 2 组 |问题 13(1)

📅  最后修改于: 2023-12-03 14:57:02.984000             🧑  作者: Mango

网络技术问题 | PHP测验 |第 2 组 |问题 13

简介

本测验主要针对于PHP开发的网络技术问题。本题目是第2组中的第13个问题,主要考察对面向对象程序设计的掌握程度。

问题描述

现有一个Person类,属性有nameage,方法有sayHello()。请在Person类的基础上定义一个Student类,属性有gradeclass,方法有study()sayHello()。要求Student类继承Person类,并在保留Person类属性及方法的基础上,实现study()方法和重写sayHello()方法,使得调用时能够输出“我是{姓名},我在{班级}{年级}学习,今年{年龄}岁了”。

代码实现
class Person {
    protected $name;
    protected $age;

    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }

    public function sayHello() {
        echo "我的名字是{$this->name},我今年{$this->age}岁了。\n";
    }
}

class Student extends Person {
    protected $grade;
    protected $class;

    public function __construct($name, $age, $grade, $class) {
        parent::__construct($name, $age);
        $this->grade = $grade;
        $this->class = $class;
    }

    public function study() {
        echo "我在{$this->class}{$this->grade}学习。\n";
    }

    public function sayHello() {
        echo "我是{$this->name},我在{$this->class}{$this->grade}学习,今年{$this->age}岁了。\n";
    }
}

// 测试
$person = new Person('小明', 18);
$person->sayHello();

$student = new Student('小红', 16, '高一', '1班');
$student->sayHello();
$student->study();
程序解释

本程序中定义了一个Person类,有nameage两个属性,以及sayHello()方法。Student类继承了Person类,并添加了gradeclass两个属性,以及study()方法和重写的sayHello()方法。

在调用sayHello()方法时,如果是Person类,则输出“我的名字是{name},我今年{age}岁了。”,如果是Student类,则输出“我是{name},我在{class}{grade}学习,今年{age}岁了。”, Student类中新增的study()方法输出“我在{class}{grade}学习。”。

在测试中创建了一个Person类对象和一个Student类对象,并执行了两个对象的方法,程序输出:

我的名字是小明,我今年18岁了。
我是小红,我在1班高一学习,今年16岁了。
我在1班高一学习。
结论

通过本测验的实现,我们可以更好地理解面向对象程序设计中的继承和重写方法,并在实际开发中更好地使用这些特性。同时,也拓宽了我们的思路,为以后的开发工作打下了基础。