批改状态:合格
老师批语:
<?php// 接口: 接口中有两个成员[接口常量, 公共抽象方法]. 接口定义的方法必须在子类(实现类)中全部实现interface iTestDemo{// 接口常量const INTERFACR_NAME = 'iTestDemo';// 构造函数public function __construct(...$ages);//公共抽象方法1public function funcName(): string;//公共抽象方法2public static function metName(): string;}class TestDemo implements iTestDemo{public function funcName(): string{return __FUNCTION__;}public static function metName(): string{return __METHOD__;}public function __construct(...$ages) { }}// 调用方法echo (new TestDemo())->funcName(), '<br>';// 调用静态方法echo TestDemo::metName(), '<br>';// 调用接口常量1echo TestDemo::INTERFACR_NAME, '<br>';// 调用接口常量2 -- 推荐方式,用接口调用echo iTestDemo::INTERFACR_NAME, '<br>';
// 抽象类: 由abstract关键字修饰, 抽象类中的抽象方法必须在子类(实现类)中全部实现. 不可实例化. 只要是类中存在抽象方法,这个类就是抽象类abstract class aTestDemo{// 构造函数public function __construct(...$ages){}//公共抽象方法1public function funcName(): string{return __CLASS__ . '=====>' . __FUNCTION__;}//公共抽象方法2abstract public static function metName(): string;// {// return __CLASS__ . '=====>' . __FUNCTION__;// }}class TestDemo2 extends aTestDemo{public static function metName(): string{return __CLASS__ . '=====>' . __FUNCTION__;}}// 调用方法echo (new TestDemo2())->funcName(), '<br>';// 调用抽象方法echo TestDemo2::metName(), '<br>';
| 类别 | 是否可以定义变量 | 是否可以定义常量 | 是否可以实例化 | 是否可以使用构造函数 | 是否可以定义实例方法 | 是否可以继承 | 实现类是否必须要全部实现父级的方法 | 是否只能使用public修饰符 |
|---|---|---|---|---|---|---|---|---|
| 抽象类 | true | true | false | true | true | true | false | false |
| 接口 | false | false | false | true | false | true | true | true |
另外, 接口可以实现多继承, 而抽象类只能继承一个.
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号