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. 抽象类和接口的区别
抽象类的 子类遵循继承原则,只能有一个父类;但一个类可以实现多个接口
抽象类中可以 有非抽象的已经实现的方法;接口不可以
抽象类中 方法和变量的访问控制自己定义;接口只能是 公共的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律