php 抽象类和接口的区别



1. 抽象类

不能被实例化

在类中 只要有一个方法被定义为抽象的,那么这个 类就必须加上abstract关键字 成为抽象类

抽象方法只声明其调用方式,不能定义具体功能实现

子类必须定义父类中的所有抽象方法,方法的访问控制符必须和父类一致或者更为宽松

子类实现的抽象方法可以增加参数但必须有默认值。

abstract class A {
    public function show(){
        $this->getName();
        echo PHP_EOL;
    }

    protected abstract function getName();
    public abstract function getAge($age);
}

class ChildA1 extends A {
    public function getName(){
        echo "I'm ChildA1";
    }
    public function getAge($age){
        echo "Age is " . $age;
    }
}

class ChildA2 extends A {
    protected function getName(){
        echo "I'm ChildA2";
    }
    public function getAge($age, $year = ''){
        echo "Age is ". $age . ', bron ' . $year;
    }
}

$ca1 = new ChildA1();
$ca1->show();
$ca1->getAge(18);

$ca2 = new ChildA2();
$ca2->show();
$ca2->getAge(20, 2000);

2. 接口

类中必须实现接口中定义的所有方法

可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容

接口中所有方法都 必须是公有

可以实现多个接口,用逗号来分隔多个接口的名称

接口 可以继承,通过使用 extends 操作符

接口 可以定义常量。接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖

interface B1 {
    const B1_NAME = 'Interface B1';
    function getName();
    function getAge($age);
}

interface B2 extends B1 {
    function show();
}

interface B3 {
    function getSchool();
}

class ChildB implements B2, B3{
    function getName(){
        echo "I'm ChildB";
    }
    function getAge($age, $year = ''){
        echo "Age is " . $age;
    }
    function show(){
        $this->getName();
        echo PHP_EOL;

        $this->getAge(23, 1997);
        echo PHP_EOL;

        echo self::B1_NAME;
        echo PHP_EOL;
    }
    
    function getSchool(){
        echo "study in Peking University";
        echo PHP_EOL;
    }
}

$b = new ChildB();
$b->show();
$b->getSchool();

2. 抽象类和接口的区别

抽象类的 子类遵循继承原则,只能有一个父类;但一个类可以实现多个接口

抽象类中可以 有非抽象的已经实现的方法;接口不可以

抽象类中 方法和变量的访问控制自己定义;接口只能是 公共的

posted @   linsonga  阅读(90)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示